Игровое управление
Игровое управление превращает объект в персонажа, которым посетитель может управлять: ходить, летать или перемещаться по карте с видом сверху. Здесь — как его настроить и за что отвечает каждый параметр.
Что понадобится
- Персонаж — объект с триггером Игровое управление.
- Твёрдая опора — пол с физическим телом и коллайдером.
- Камера — или никакой. Если камеру не выбрать, будет использоваться встроенная.
Добавьте игровое управление
Игровое управление — это триггер, а не шаг. Все настройки контроллера находятся в триггере.
- Выберите объект, который станет персонажем.
- В инспекторе нажмите + новый компонент и выберите События.
- Нажмите + добавить событие.
- Выберите триггер Игровое управление.
- Настройте параметры, описанные ниже.
- По желанию добавьте шаги в ветки В покое, При движении, При беге и При прыжке, чтобы реагировать на то, что делает персонаж, — например, проигрывать анимацию.
Контроллер существует, пока его объект включён. Выключите объект — контроллер исчезнет. Включите снова — контроллер вернётся.
Движение
| Параметр | За что отвечает |
|---|---|
| Движение | Ходьба, Полёт или Сверху |
| Относительно | что считать «вперёд»: куда смотрит Камера или собственные Оси сцены |
| Скорость · Множ. бега | скорость в метрах в секунду и во сколько раз быстрее персонаж бежит, пока зажат Shift |
| Задержка движения | за какое время персонаж разгоняется до полной скорости и останавливается |
| Автоповорот · Вращение | разворачивается ли персонаж туда, куда идёт, и как быстро |
| Клавиши | WASD, стрелки или и то и другое |
| Прыжок | высота прыжка в метрах; 0 — прыгать нельзя |
| Air Control | насколько посетитель может управлять персонажем в прыжке |
| Сброс по Y | если персонаж упадёт на столько ниже точки старта, его вернут обратно |
| Движение по клику | персонаж идёт в точку, куда нажал посетитель |
| Поворот | чем поворачивать вид: мышью, клавишами или и тем и другим |
Допустим, вы поставили полсекунды. Тогда персонаж набирает полную скорость за полсекунды. Склоны, неровности и масса его замедляют, поэтому движение ощущается физическим.
0 значит «как можно быстрее». Это почти мгновенно, но не совсем: у персонажа всё равно есть масса.
Тело
Контроллер даёт объекту капсулу. Поэтому персонаж натыкается на препятствия, а не проходит сквозь них.
| Параметр | За что отвечает |
|---|---|
| Форма | Капсула или Сфера |
| Размер | радиус и высота в метрах |
| Положение | сдвигает капсулу относительно объекта |
| Mass | насколько сильно персонаж толкает других и насколько трудно сдвинуть его самого |
| Подсказка | показывает капсулу в редакторе |
Если у объекта уже есть своё физическое тело, контроллер оставляет его и только управляет им, с учётом его массы. Если тела нет, контроллер создаст его сам.
Пол и стены останавливают персонажа, только если у них есть физическое тело и коллайдер. Остальная геометрия — просто декорация, и персонаж проходит сквозь неё. → Физика
Гравитация берётся из пространства, и высота прыжка считается относительно неё. Сцена с игровым управлением включает физику, даже если в пространстве она была выключена. Без физики ничего не будет двигаться.
Камера, которая следует за персонажем
| Параметр | За что отвечает |
|---|---|
| Камера | какая камера следует за персонажем; оставьте пустым, чтобы использовать встроенную |
| Направление | всё время смотреть На цель или держать заданный угол — Свой |
| Задержка · Задержка пов. | насколько камера отстаёт, в секундах |
| Вверх / вниз · Влево / вправо | можно ли поворачивать вид в эту сторону: Да, Нет или Предел |
| Предел | насколько можно повернуть вид, в градусах |
В первом кадре камера запоминает расстояние и угол до персонажа и дальше их сохраняет. Вводить расстояние или высоту не нужно. Поставьте камеру во вьюпорте так, как выглядит хорошо, и она останется там.
Как ведёт себя камера:
- Сначала поворачивается, потом едет. Персонаж может немного уйти в сторону, пока камера только поворачивается. Камера сдвигается, лишь когда персонаж доходит до края этой зоны. Это выглядит естественнее, чем камера, жёстко привязанная к персонажу.
- Отставание меняет кадр, а не расстояние. Камера не отъезжает назад, когда персонаж разгоняется. Иначе это выглядело бы как случайный зум, а от такого может укачать.
- Камера заходит персонажу за спину, пока он движется, а посетитель не поворачивает вид. Если зафиксировать Влево / вправо или выбрать режим Сверху, этого не будет.
- Ничто не загораживает обзор. Если между камерой и персонажем что-то оказалось, камера подъезжает ближе, а потом плавно отъезжает обратно. Ближе чем на полметра она не подходит.
- Колёсико мыши приближает и отдаляет — примерно от трети до двух с половиной заданных расстояний.
Пока контроллер ведёт камеру, её собственное управление (орбита, полёт) не работает. Иначе они мешали бы друг другу в каждом кадре.
Сенсорное управление и геймпады
Экранные элементы управления появляются только на сенсорных экранах, так что их можно не выключать.
| Параметр | За что отвечает |
|---|---|
| Управление касанием → Включить | показывает стик и кнопку прыжка |
| Поворот | чем поворачивать вид: Свайп по сцене или второй Стик |
| Стик движения · Кнопка прыжка | где находится каждый элемент, на сетке 3×3 |
| Отступ · Размер кнопок | расстояние от края экрана и размер в пикселях |
| Видимость | Выкл прячет элементы; поворот свайпом всё равно работает |
Геймпад работает без настройки:
- левый стик двигает персонажа;
- правый стик поворачивает обзор;
- A — прыжок;
- бамперы и триггеры — бег.
Реагируйте на действия персонажа
Ветки В покое, При движении, При беге и При прыжке срабатывают, когда персонаж меняет то, что делает. Скрипты и патчи получают это изменение в тот же момент:
- скрипт может его слушать;
- в патче у ноды
on_game_controlесть выходыpulseиstate.
Поэтому звук шагов можно проигрывать из скрипта, пока ветки управляют анимацией, и одно не разойдётся с другим.
Следование без контроллера
Для чего-то попроще — враг, который идёт за игроком, питомец или цель для камеры — используйте шаги Следовать за объектом, Смотреть на объект и Прекратить следование.
Эти шаги двигают объект напрямую. Поэтому они не работают на объекте, который уже двигает физика. Такой объект толкайте импульсами из скрипта.
Дальше: Карточки интерфейса — кнопки, меню и табло со счётом.