Здравствуйте! В этом уроке мы создадим нашего персонажа и научим его двигаться.
Для этого нам нужен спрайт персонажа. Для себя я выбрал вот такой пак со спрайтами:
Дальше переносим спрайт на сцену, который мы хотим:
Но погодите, наш персонаж оказался слишком маленький. Это можно исправить двумя способами: вручную увеличить его с помощью инструментов, о которых я рассказывал, или изменить параметр спрайта:
Теперь нам надо добавить физику нашему персонажу, для этого в окне Инспектора нажимаем Add Component и выбираем RigidBody2D:
Также необходимо добавить само тело. Добавляем Box Collider 2D и нажимаем на значок:
Дальше у спрайта появится зеленая обводка, которая обозначает площадь тела. Подгоните размеры под спрайт.
Теперь же необходимо добавить тело земле, чтобы персонаж не проваливался сквозь неё: добавляем TileMap Collider 2D. Можно заметить, что у земли добавились зелёные линии, а если еще лучше присмотреться, то можно заметить, что эти линии находятся между тайлами, а это нам не нужно. Поэтому мы добавляем ещё Composite Collider 2D, а в TileMap Collider 2D ставим галочку у параметра Used By Composite. И о чудо, как теперь всё прекрасно выглядит!
Теперь можно запустить Игровой режим. Но что мы видим! Наша земля падает. Это случилось из-за автодобавления Rigid Body 2D, просто вместо Dynamic ставим Static. Вуа-ля, земля не падает!
Но нам же хочется управлять персонажем? Для этого надо создать Скрипт. Создаём в корневой папке папку Scripts, открываем её и создаём C# Script, который также открываем:
Метод Start() исполняется, когда мы запускаем игру, а Update() выполняется каждый кадр.
Давайте проинициализируем переменные fox типа Rigidbody2D и speed типа float:
Теперь нам надо добавить движение нашей Лисе. Для этого в методе Update() (а лучше в FixedUpdate(), т.к. мы взаимодействуем с физическим объектом в скрипте; за уточнение спасибо Василию Курбатову, комментарий которого закреплен под этой статьёй; также уточню, что все взамидойсвтия с физ. объектами, которые будут в следующих уроках следует также добавлять именно в FixedUpdate()) добавим одну сточку:
Не пугайтесь, сейчас расскажу, что она делает:
- fox.velocity - это скорость Лисы, и, как известно, у скорости есть направление, т.е. вектор (new Vector2());
- Input.GetAxisRaw() - это первый параметр вектора (X). Он принимает соответствующие нажатия для передвижения вправо/влево;
- *speed - это коэффициент скорости, который можем сами задать в интерфейсе Unity;
- fox.velocity.y - это координата Y Лисы.
Таким образом, эта строка создаёт вектор, который начинается на координатах Лисы и который направлен влево/вправо.
Теперь необходимо добавить прыжок. Для этого надо отслеживать нажатие клавиши (например Space). Чтобы это делать, надо в методе Update() добавить проверку нажатия:
В условии мы проверяем на нажатие Space. Если произошло нажатие, то мы Лисе добавляем вектор, направленный вверх.
Но нам не хватает одной детали: проверки на "опору":
В условии мы добавили grounded, т.е. если мы нажали на Space и Лиса на земле, то только тогда будет прыжок. Сам же Grounded только тогда принимает значение true, когда в радиусе находится слой ground.
Чтобы добавить этот слой в Unity выбираем группу тайлов земли и нажимаем в Инспекторе Layer, Add layer (Добавить Слой):
Дальше создаём дочерний от нашего персонажа пустой игровой объект и переносим его в ноги. Затем возвращаемся к нашему персонажу.
В Ground Check я добавил пустой объект, а в Ground добавил тот слой, который только что создал.
Остался последний шаг: исправить багу, когда мы находимся слева/справа от тайла и не падаем. Для этого добавляем Physics Material в папку и устанавливаем значения 0 на обоих пунктах. Далее в Box Collider 2D персонажа добавляем этот файл:
В этом уроке мы научились управлять персонажем и поправили баги в его управлении.
В следующем уроке мы добавим анимацию нашему персонажу при движении.