Ни для кого не секрет, что передвижение является чуть ли не отправной точкой создания игры, ведь так? Сейчас я очень быстро и понятным языком расскажу как же сделать передвижение персонажа под 3D и 2D игру.
Все свои переменные я буду называть по своим именам, так что рекомендую читать внимательнее или сначала делать как у меня и только потом изменять
С чего начнем?
Конечно же создадим скрипт, я назову его Controller, вы же можете назвать как хотите. Далее нужно прописать всего пару строк.
Передвижение
Для начала создаем 2 переменных типа float в классе, которые будут принимать значения наших осей, про которые мы поговорим дальше. Я назову их hor и ver.
Далее спускаемся ниже и уже в методе Update() присваиваем нашим переменным значения.
Объясняю: в Unity есть такая вещь, как Axes(оси), которые имеют значение от 1 до -1. Найти их мы может по пути Edit/Project Settings/Input Manager/Axes . Выберите самую первую ось Horizontal и вы увидите, что что для нее можно присвоить Negative и Positive Button, в нашем случае это a и d. Когда мы нажмем на кнопку a, то есть негативную кнопку, эта ось будет иметь значение -1, а когда позитивную 1.
Благодаря осям мы можем сократить наш код вдвое!
Для чего мы умножили это на 2? Это будет скорость нашего персонажа. Если хотите, вы можете сделать это с помощью переменной.
Для чего Time.deltaTime? Для плавности. Вы можете убрать это, но тогда движения станут резкими.
Теперь осталось только указывать персонажу путь с помощью наших переменных. В этом же методе добавляем следующее:
transform.Translate - передвигает персонажа по координатам xyz(то есть Vector3). Если игрок будет нажимать, например a, переменная hor будет равняться -1 и мы каждый кадр просто отнимает от позиции x нашего персонажа единицу.
Можете прикрепить наш скрипт к персонажу и вы увидите, что нажимая a/d персонаж двигается влево и вправо, а нажимая w/s вперед и назад.
Если вы делаете 2D игру, то убираете переменную ver совсем и заменяете Vector3 на Vector2.
Вращение камерой(3D)
В том же скрипте создадим 2 новых переменных того же типа float в классе. Они будут отвечать за значения осей мыши. Я назову их mouseX и mouseY.
Возвращаемся в Update() и там пишем следующее:
Ось Mouse X отвечает за передвижение мыши по влево и вправо, а ось Mouse Y за вперед и назад.
Зачем умножили на 10? Это будет наша чувствительность мыши. Ее так же можно заменить на переменную если захотите.
Осталось совсем чучуть. Теперь просто нужно сделать сам поворот камеры.
transform.Rotate - поворачивает объект по xyz.
Мы поворачиваем координату Y нашего персонажа, когда двигаем мышью влево или вправо.
А как же поворот вверх? Ну вы же не хотите чтобы персонаж весь поворачивался вверх? Ну так давайте для этого сделаем ссылку на нашу камеру, которая и будет поворачиваться вверх.
Теперь перетащим нашу камеру в инспекторе в нашу ссылку.
Надеюсь вы знаете как это делать, потому без даже таких знаний вам еще рано приступать к передвижению.
Пишем последние строчки
Почему -mouseY? Если делать без минуса, то камера будет двигаться наоборот вверх - вниз, вниз - вверх.
Вот и всё! Теперь сделайте камеру дочерним объектом персонажа, подстройте как вам нужно и проверяйте.
Если остались вопросы - можете посмотреть моё видео на ютубе/дзене или же спросить в комментариях. Не пожалейте двух секунд на лайк, а так же можете посмотреть и другие мои статьи или подписаться на канал, это будет для меня лучшей поддержкой продолжать.