Команда Unity3D заботится о рядовых пользователях и разработчиках игр. Поэтому в Unity была введена интересная система, называется она – Character Controller, а по русски – Контроллер Персонажа. Что же она делает и для чего вообще нужна? В основном она используется для управления персонажем от первого или третьего лица без использования физики Rigidbody.
Итак для начала нам следует подготовить сцену. Создадим Terrain, Меню GameObject>3d Object>Terrain
И создадим заготовку нашего персонажа. Для этого опять, Меню GameObject>Create Empty и назовем его Player. Затем делаем нашу камеру дочерней нашему свежесозданному Player.
Теперь добавим плееру компонент Character Controller. Для этого в окне инспектора нажмем кнопку Add Component и в появившемся списке в пункте Physics нажмем на Character Controller.
Когда контроллер персонажа добавлен к нашей заготовке, рассмотрим подробнее поля его настроек.
Slope Limit: этот параметр ограничивает возможность персонажу взбираться на различные препятствия. Например, по умолчанию стоит число 45, это значит, что если угол препятствия больше 45 градусов, то персонаж на него не сможет взобраться.
Step Offset: персонаж будет подниматься по лестнице, только если он ближе к земле, чем указанное значение.
Skin width: 2 коллайдера могут пересечься друг с другом на глубину, равную значению Skin Width.
Min Move Distance: если персонаж пытается переместиться ниже указанного значения, он не будет двигаться вообще.
Center: сдвиг коллайдера контроллера.
Radius: радиус коллайдера контроллера. Определяет, насколько жирный получился персонаж.
Height: высота коллайдера. Ну и, соответственно, высота контроллера. Например, если сделать это значение выше высоты дверных проемов, то персонаж просто застрянет в них.
Пока все значения оставим по умолчанию. В дальнейшем можно поменять их для лучшей работы контроллера. И как, это не странно, подготовка персонажа готова. Нам осталось написать небольшой скрипт управления камерой и нашим контроллером и персонаж будет готов.
Продолжаем.
Создадим новый скрипт под названием Player. Этот скрипт нам нужен для отдачи команд CharacterController, который и будет их выполнять, двигая и поворачивая персонажа. Для этого выберем в иерархии нашего персонажа и в инспекторе нажмем Add Component. Далее, в конце появившегося списка, нажимаем New Script, в появившемся поле ввода вводим название скрипта, в нашем случае – Player.
Завершающие действие – это кнопка Create and Add. Нажимаем! Отлично, скрипт создан и добавлен к нашему персонажу!
Откроем его, кликнув по его имени два раза.
В этом скрипте нам надо обьявить три переменные. Первая – это ссылка на CharaсterController. Вторая – скорость движения. Третья-скорость поворота. И укажем им значения по умолчанию 1 и 3 соответственно.
В методе Start, который, как мы знаем, вызывается при старте сцены, добавим строку, которая найдет и добавит компонент CharacterController к нашей переменной. Конечно же, при условии, что он присутствует на том же GameObject что и наш скрипт.
Теперь переходим к методу Update. Этот метод вызывается каждый кадр. В него для начала добавим строку, которая поворачивает наш персонаж вокруг оси Y, посредством клавиш leftArrow и RightArrow.
Затем мы задаем, куда нам двигаться. Точнее – вектор направления. Он у нас forward или z.
Затем мы устанавливаем скорость движения. В зависимости от того, какая клавиша нажата, она положительная или отрицательная. То есть вперед и назад.
И наконец, собираем все это вместе и передаем на Character Controller.
Сохраняем наш скрипт и переходим в Unity. На нашем персонаже должно быть два скрипта Charaster Controller и Player.
Жмем Play и стрелочками на клавиатуре двигаем и поворачиваем нашего персонажа. Урааа, побежали!
не работает
Проконсультируйтесь пожалуйста через my.first.unity.help@gmail.com
Здравствуйте всем дороги програмисти меня нужно помочь по Юнити и скрипть у меня скрипть там ошибка выдаеть как и исправить
Мы консультируем только наших учеников по предоставленным курсам.
C кодом разобралась, но движение не работает. Может быть нужно что-то ещё?
Проконсультируйтесь пожалуйста через my.first.unity.help@gmail.com Мы не можем вслепую ответить на вопрос, не видя Ваш проект.
То есть мне прислать вам проект по почте ?
Максимальо подробно, со скриншотами, опишите проблему по почте. Если скришотов будет не достаточно для ответа на Ваш вопрос, тогда мы попросим прислать сам проект.
У меня при создании кода выдаёт ошибку. Не нравятся её скобки и нули. Что делать
Проконсультируйтесь пожалуйста через my.first.unity.help@gmail.com
Как можно поменять назначение клавиш?
Проконсультируйтесь пожалуйста через my.first.unity.help@gmail.com
Здравствуйте, а нельзя такой же урок написать, но с новым input system
постараемся реализовать )
Спасибо за оперативность ответа и за то, что дали надежду!)
Здраствуйте, запускаю игру и Y быстро меняется на все меньшие числа.
Проконсультируйтесь пожалуйста через почту: my.first.unity.help@gmail.com
Спасибо Всё работает!
Давно думал как это сделать.
В какой версии юнити сделан этот скрипт? У меня какая-то ошибка 1002 и переменные не отображаются в скрипте
Пришлите нам на почту скрины ошибки – посмотрим и ответим.
Что делать если, запускаю игру, она как бы включаеться но это не отображается
Напишите пожалуйста в поддержку на почту сайта и желательно покажите видео проблемы, посмотрим.
Здравствуйте, что я делаю не так, в VisualStudio скрипт отоброжается иначе чем на ваших скриншотах, как это можно исправить? вот так это выглядит у меня https://imgur.com/a/xoyY6mU
Напишите нам на почту SUPPORT@unity3dschool.com
здравствуйте, какой скрипт нужно написать, чтобы персонаж прыгал при нажатии UI обьекта, при помощи Character Controller
Проконсультируйтесь пожалуйста через поддержку сайта.
Как в коде временно отключить Character Controller?
Пытаюсь сделать Respawn персонажа после смерти. Написал следующий код:
…
_player.transform.position = spawnPlayer.position;
…
При наличии компонента Character Controller персонаж остается на том же месте, где умер. Но если отключить этот компонент – код работает правильно и персонаж перемещается в координаты Empty объекта spawnPlayer.
Попробуйте отключать перед перемещением Character Controller и включать после. С помощью gameObject.GetComponent().enabled = true / false;