Реализирайте откриване на удари с плочки
Среда за проверка
- Уиндоус
-
- Прозорци 11
- Редактор на единство
-
- 2021.3.3f1
- Пакет на входната система
-
- 1.3.0
Предпоставки за този съвет
Следните настройки са направени предварително като предпоставка за описанието на този съвет.
Какви са предпоставките за този съвет?
- Създаване на 2D карта отгоре-надолу с помощта на стандартни карти с плочки на Unity
- Сблъсък със стандартна физика (2D)
За заемането на материали за карти
Ние обработваме заимствани от следните сайтове.
Изпълнение на ходещи герои
Първо, внедрете карта и знак, който извършва откриване на удари. Този знак може да бъде преместен с клавишите на курсора на клавиатурата. Въпреки това, ако приложите подходяща разходка, тя ще бъде дълга и далеч от същността на съветите за книги, така че този път ще преместя само една проста единична картина.
Ако искате да реализирате анимации за ходене, вижте следните съвети:
След като създадете проекта, добавете изображение на спрайт на обекта, който искате да преместите в проекта.
Изберете изображението и задайте пикселите на единица на 32 от инспектора. Това е така, защото размерът на един квадрат на mapchip е 32 пиксела, така че се вписва в това. След като конфигурирате, кликнете върху бутона "Приложи" по-долу.
Поставете спрайта в изгледа.
Създайте скрипт, за да преместите спрайта. Това е подобно на следните съвети:
Оставете името Player
на скрипта като .
Код, както следва:
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
// 一定時間ごとに呼ばれます
void FixedUpdate()
{
// キーボードの情報を取得
var keyboard = Keyboard.current;
// スプライトの移動処理
if (keyboard.leftArrowKey.isPressed)
{
transform.Translate(-0.1f, 0, 0, Space.World);
}
if (keyboard.rightArrowKey.isPressed)
{
transform.Translate(0.1f, 0, 0, Space.World);
}
if (keyboard.upArrowKey.isPressed)
{
transform.Translate(0, 0.1f, 0, Space.World);
}
if (keyboard.downArrowKey.isPressed)
{
transform.Translate(0, -0.1f, 0, Space.World);
}
}
}
Прикрепете към спрайта, който искате да преместите.
Стартирайте играта и проверете дали искате да я преместите с клавиатурата.
Подготовка на MapTips
На първо място, ще подготвим mapchip и ще създадем карта. Тази процедура е подобна на следните съвети: MapTips с 2D Tilemap Extras също са в състояние да открият сблъсък, но те няма да бъдат използвани в тази статия, защото процедурата ще бъде дълга.
Подгответе оригиналното изображение на MapTip и го добавете към вашия проект. За да направите операцията по-лесна за разбиране, моля, подгответе "пешеходно място" и "непроходимо място" за материала на чипа на картата.
Настройте го за MapChips в инспектора и кликнете върху бутона Приложи. След като конфигурирате, отворете редактора на Sprite.
Това е 32-пикселова карта, така че ще я разделя на 32.
Изберете раздела Палитра с плочки. Ако не, покажете го с "Window > 2D -> Tile Palette" от менюто. Създайте нова палитра. Името е произволно, но засега ще го наречем "MapChipPalette".
Създайте папка MapChipPalette в Сцени и я уточнете.
Добавете пояснение, като го плъзнете в палитрата. Запишете го в папката MapChipPalette, която създадохте по-рано.
Създаване на карта
Този път, картата хит преценка ще се извършва в единици на "Tilemap". Затова ще създадем две Tilemaps, "Tilemap без откриване на удари" и "Tilemap с откриване на удари".
Първо, създайте две плочки в йерархията. Можете да създадете две в мрежата. Имената са "TilemapObeject" и "TilemapGround" за яснота.
Първо, създайте "TilemapGround". Тъй като това е подвижен диапазон, можете просто да поставите земята. Ако е на земята, можете да промените модела.
Между другото, ако знакът е скрит, изберете символния обект и задайте реда на слоя на инспектора Sprite Renderer
на 2.
Редът на слоевете е 0 по подразбиране, а Tilemap е 0, така че ако го увеличите над тази стойност, той ще бъде показан на преден план.
След това изберете TilemapObject и поставете картата, която искате да направите неподвижна. Задайте реда на слоя първо на 1. Това е, за да се появи пред земята.
Ето как изглежда, ако скриете земята.
Разбира се, в този момент няма настройки, свързани с откриването на сблъсък, така че можете да карате на високо място нормално. След това ще настроим откриването на сблъсък.
Настройки за откриване на сблъсък
Първо, нека да създадем характера. Тази настройка е почти същата като съветите по-долу, така че ще пропусна подробностите и ще обясня накратко процедурата.
Изберете знаков обект от йерархията и изберете Physics 2D -> Circle Collider 2D от Add Component. Ако формата на обекта е правоъгълна, "Box Collider 2D" е добре.
По същия начин добавете "Физика 2D -> Твърдо тяло 2D".
Настройте гравитационната скала на 0, за да предотвратите Rigidbody 2D
автоматично падане.
Проверете Z под Ограничения, за да предотвратите завъртането на спрайта при сблъсък.
След това изберете "TilemapObject", който искате да ударите, и изберете "Tilemap -> Tilemap Collider 2D" от "Add Component".
Това е всичко. Дори не се нуждаете от програмиране. Стартирайте играта и се опитайте да ударите обекта, който се превръща в стената. Мисля, че можете да се уверите, че спира правилно.
Въпреки това, когато всъщност го ударите, мисля, че ще има точки на безпокойство в поведението. Ето някои решения:
Неудобно поведение на откриване на удари с картата и решенията
Когато се ударите в стена, може да откриете няколко неща, които ви притесняват.
Ако се придвижите до стената, ще бъдете хванати в средата
Box Collider 2D
Мисля, че това ще се случи, ако използвате обект.
Например, от сцената по-долу, когато натиснете клавиша в долния ляв ъгъл, искате той да се премести наляво по стената. Въпреки това, след известен напредък, мисля, че ще се забие в нещо и ще спре.
Разпознаване на вдлъбнатини в стените по позиция
Circle Collider 2D
Мисля, че е лесно да се разбере, ако прикачите .
Стената трябва да е плоска, но ако я преместите срещу стената, ще видите, че стената се движи, сякаш е неравна.
Причини и решения за удари и удари
Причината, поради която те се случват, изглежда е, че "определянето на удара се извършва на базата на mapchip". Всъщност, когато изберете TilemapObject, на мястото, където се намира откриването на попадения, се появява зелена линия и можете да видите, че това е линия, начертана в единиците на MapTip.
Така че, ако движещият се обект е на линия, еквивалентна на точно един чип на картата, той ще бъде оценен като хит с един чип на картата. Ако се сблъскате на границата на чиповете на картата, два чипа на картата ще бъдат ударени и съдени, така че силата на отскока ще се увеличи.
Мисля, че най-добрият начин за решаване на този проблем е да се комбинира откриването на удари с приложените mapchips. Ето как да го направите:
ИзберетеTilemap Collider 2D
"TilemapObject" с откриване на удари от инспектора и проверете "Използване в композит" от .
Както е посочено в предупреждението, това само по себе си няма ефект, така че изберете "Физика 2D -> композитен колайдер 2D" от "Добавяне на компонент".
Твърдо тяло 2D се добавя заедно с композитен колайдер 2D.
Малко е объркващо, но мисля, че можете да потвърдите, че зелената линия на границата между mapchips с откриване на удари е изчезнала.
Не искам картата на плочките да се движи, затова ще Rigidbody 2D
оставя типа тяло на компонента като "статичен".
Сега стартирайте играта и се опитайте да я накарате да се движи. Мисля, че дори и да се движите диагонално по стената, тя няма да се хване и можете да се движите плавно без неравномерно движение.
Премахване на характера избутва назад от стените
Можете да видите, че ако преместите героя, за да натиснете стената и след това спрете да се движите, той ще се държи малко като отскочил от стената.
За да решите това,Rigidbody 2D
изберете символния обект и променете "Откриване на сблъсък" на "Непрекъснато" от компонента.
Разликата между "прекъснат" и "непрекъснат" е следната.
Прекъснат
Откриването на сблъсък е механизъм, който мисли след преместване. Това е форма, която извършва откриване на сблъсък от състоянието, в което е преместена и вградена в стената. Лесно е да се разбере, ако го свържете с батути и гума, но колкото повече е вграден, толкова по-отблъскваща ще се увеличи силата и отскокът ще бъде по-силен. Вместо това изчислението се извършва след преместване, така че разходите за обработка са ниски.
Непрекъснат
Тя се обработва, докато се определя какво е на път. Определете дали има стена между позицията преди и след преместването, Ако има стена, тя ще прецени сблъсъка там и ще спре, така че практически няма отблъскване. Вместо това разходите за обработка се увеличават малко, защото изчислението е включено в средата на движението.
Хванати в ъгъла на обект на картата
В зависимост от програмата и местоположението, някои са уловени, а други не, а причината не се е променила много. Между другото, това се случва с ъглови ъгли като Box Collider 2D, а не със заоблени кръгове.
Дори и да се случи такова мистериозно явление, добре е да има заоблени ъгли на колайдера, за да се избегнат удари. Той е ограничен до Box Collider 2D, но за да го направи кръгъл, Box Collider 2D компонентът на символния обект има "радиус на ръба" и поставяте стойност там. Ако въведете 1 като числова единица, ще се извърши закръгляване за размера на обекта. Зависи от размера, но е добре да се сложи около 0,1.
Между другото, ударната преценка се увеличава само с размера на закръглеността, така че, моля, коригирайте я, ако е голяма. Box Collider 2D има бутон Collider Edit, който ви позволява да го преоразмерите директно в изгледа, като кликнете върху бутона. Тъй като външната зелена линия е действителното откриване на удари, задайте размера, така че да не е неестествено.
След това стартирайте играта, за да сте сигурни, че няма да се надраска и да направите корекции.