Урок 3. Движение объекта с помощью Character Controller. Часть 1.
Добрый день. В этой статье мы рассмотрим движение персонажа с помощью компонента Character Controller. Возьмем наш объект с предыдущего урока и удалим у него в инспекторе Collider, Rigidbody и скрипт созданный на прошлом уроке. После этого добавим на него компонент Character Controller(Скриншот №1)
Давайте разберемся в функциях данного компонента. Ниже представлены настройки данного компонента, а так же, что они делают.
Наименование | Описание. |
---|---|
Slope Limit | Это значение ограничивает возможность взбираться на слишком крутые уклоны. Обозначается в процентах. |
Step Offset | Значение настраивает высоту ступенек, бордюров и т.д. Персонаж будет подыматься только в том случае, если значение выставленно выше, чем высота выступа. |
Skin Width | В этом значении выставляем на сколько коллайдер может принукнуть в другой коллайдер(оптимальное значение 10%), уменьшает дрожание при столкновении. |
Min Move Distance | Значение выставляет минимальное расстояние перемещения и регулируется для уменьшения дрожание. Лучше оставить на 0 или выставить 0.001. |
Center | Перемещает коллайдер по осям X, Y, Z. |
Radius | Отвечает за радиус коллайдера. |
Height | Отвечает за размер коллайдера по оси Y изменяется равномерно от центра вверх и вниз. |
VelocityChange | Создаёт мгновенное изменение скорости к жесткому телу, игнорируя его массу. |
Теперь давайте создадим скрипт и назовем его MoveCharacter. Откроем его и создадим переменные для начала создадим переменные для скорости движения (speedMove), гравитации (gravityMove), силы прыжка (jump), самого прыжка(jumpUp) и выставим им значение по умолчанию. Так же нужно создать переменную для самого контроллера (controller) и вектора (move).
Теперь давайте создадим сразу все методы. Их у нас будет всего 4: Start(), FixedUpdate(), Move() и Jump(). Сразу в методе старт подключим к переменной компонент Character Controller, а в метод FixedUpdate() впишем обращение к методам движения и прыжка(Скриншот №3).
Давайте создадим алгоритм для движения нашего персонажа, а так же гравитацию. Для того чтобы на нашего персонажа гравитация действовала только когда он находится в воздухе сделаем проверку и если он находится на какой-либо поверхности (в прошлых уроках мы проверяли это по тегу “Ground”, но сейчас нам нужно, чтобы наш персонаж отталкивался от всех поверхностей, на которых будет находиться), применим к нему алгоритм гравитации.
Затем создадим 2 переменные x и z для перемещения (в прошлых уроках мы это изучали подробнее). Передадим переменной move новый Vector3 (x, y. z). Для x используем переменную x и speedMove, для y переменную jumpUp, для z переменную z и speedMove. Так же весь вектор умножим на Time.deltaTime. Теперь передадим нашему персонажу вектор который создали.
Для этого нужно взять нашу переменную move и присвоить ей вектор с помощью команды Move.(Скриншот №4).
Теперь давайте научим нашего персонажа прыгать. Тут все просто. В методе Jump() создадим проверку о нахождении персонаж на поверхности и нажата ли кнопка пробел. Если все условия соблюдены присвоим переменной прыжка силу прыжка (Скриншот №5).
На этом все. Сохраним скрипт и запустим его в юнити. Если нужно поменять параметры переменных, это можно будет сделать в юнити в инспекторе. Если Вам нужно, чтобы персонаж передвигался с помощью поворота читайте вторую часть статьи.