Найти тему
zxcProger - Unity

Как сделать простое передвижение персонажа в пару строк

Оглавление

Ни для кого не секрет, что передвижение является чуть ли не отправной точкой создания игры, ведь так? Сейчас я очень быстро и понятным языком расскажу как же сделать передвижение персонажа под 3D и 2D игру.

Все свои переменные я буду называть по своим именам, так что рекомендую читать внимательнее или сначала делать как у меня и только потом изменять

С чего начнем?

Конечно же создадим скрипт, я назову его Controller, вы же можете назвать как хотите. Далее нужно прописать всего пару строк.

Передвижение

Для начала создаем 2 переменных типа float в классе, которые будут принимать значения наших осей, про которые мы поговорим дальше. Я назову их hor и ver.

Далее спускаемся ниже и уже в методе Update() присваиваем нашим переменным значения.

-2

Объясняю: в Unity есть такая вещь, как Axes(оси), которые имеют значение от 1 до -1. Найти их мы может по пути Edit/Project Settings/Input Manager/Axes . Выберите самую первую ось Horizontal и вы увидите, что что для нее можно присвоить Negative и Positive Button, в нашем случае это a и d. Когда мы нажмем на кнопку a, то есть негативную кнопку, эта ось будет иметь значение -1, а когда позитивную 1.

Так выглядит меню осей
Так выглядит меню осей

Благодаря осям мы можем сократить наш код вдвое!

Для чего мы умножили это на 2? Это будет скорость нашего персонажа. Если хотите, вы можете сделать это с помощью переменной.

Для чего Time.deltaTime? Для плавности. Вы можете убрать это, но тогда движения станут резкими.

Теперь осталось только указывать персонажу путь с помощью наших переменных. В этом же методе добавляем следующее:

-5

transform.Translate - передвигает персонажа по координатам xyz(то есть Vector3). Если игрок будет нажимать, например a, переменная hor будет равняться -1 и мы каждый кадр просто отнимает от позиции x нашего персонажа единицу.

Можете прикрепить наш скрипт к персонажу и вы увидите, что нажимая a/d персонаж двигается влево и вправо, а нажимая w/s вперед и назад.

Если вы делаете 2D игру, то убираете переменную ver совсем и заменяете Vector3 на Vector2.

Вращение камерой(3D)

В том же скрипте создадим 2 новых переменных того же типа float в классе. Они будут отвечать за значения осей мыши. Я назову их mouseX и mouseY.

-6

Возвращаемся в Update() и там пишем следующее:

-7

Ось Mouse X отвечает за передвижение мыши по влево и вправо, а ось Mouse Y за вперед и назад.

Зачем умножили на 10? Это будет наша чувствительность мыши. Ее так же можно заменить на переменную если захотите.

Осталось совсем чучуть. Теперь просто нужно сделать сам поворот камеры.

-8

transform.Rotate - поворачивает объект по xyz.

Мы поворачиваем координату Y нашего персонажа, когда двигаем мышью влево или вправо.

А как же поворот вверх? Ну вы же не хотите чтобы персонаж весь поворачивался вверх? Ну так давайте для этого сделаем ссылку на нашу камеру, которая и будет поворачиваться вверх.

-9

Теперь перетащим нашу камеру в инспекторе в нашу ссылку.

Надеюсь вы знаете как это делать, потому без даже таких знаний вам еще рано приступать к передвижению.

Пишем последние строчки

Должно получиться так
Должно получиться так
Почему -mouseY? Если делать без минуса, то камера будет двигаться наоборот вверх - вниз, вниз - вверх.

Вот и всё! Теперь сделайте камеру дочерним объектом персонажа, подстройте как вам нужно и проверяйте.

Конечный результат
Конечный результат

Если остались вопросы - можете посмотреть моё видео на ютубе/дзене или же спросить в комментариях. Не пожалейте двух секунд на лайк, а так же можете посмотреть и другие мои статьи или подписаться на канал, это будет для меня лучшей поддержкой продолжать.