Warning: Undefined array key "is_rate_editable" in /var/www/webmasr5/public_html/wp-content/plugins/wpdiscuz/class.WpdiscuzCore.php on line 1303
Движение персонажа с помощью Character Controller. Часть 1.

webmas

Урок 3. Движение объекта с помощью Character Controller. Часть 1.

Добрый день. В этой статье мы рассмотрим движение персонажа с помощью компонента Character Controller. Возьмем наш объект с предыдущего урока и удалим у него в инспекторе Collider, Rigidbody и скрипт созданный на прошлом уроке. После этого добавим на него компонент Character Controller(Скриншот №1)

Скриншот №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).

Скриншот №2

     Теперь давайте создадим сразу все методы. Их у нас будет всего 4: Start(), FixedUpdate(), Move() и Jump().  Сразу в методе старт подключим к переменной компонент Character Controller, а в метод FixedUpdate() впишем обращение к методам движения и прыжка(Скриншот №3). 

Скриншот №3

     Давайте создадим алгоритм для движения нашего персонажа, а так же гравитацию. Для того чтобы на нашего персонажа гравитация действовала только когда он находится в воздухе сделаем проверку и если он находится на какой-либо поверхности (в прошлых  уроках мы проверяли это по тегу “Ground”, но сейчас нам нужно, чтобы наш персонаж отталкивался от всех поверхностей, на которых будет находиться), применим к нему алгоритм гравитации.

      Затем создадим 2 переменные x и z для перемещения (в прошлых уроках мы это изучали подробнее).  Передадим переменной move новый Vector3 (x, y. z). Для x используем переменную x и speedMove, для y переменную jumpUp, для z переменную z и speedMove. Так же весь вектор умножим на Time.deltaTime. Теперь передадим нашему персонажу вектор который создали.

     Для этого нужно взять нашу переменную move и присвоить ей вектор с помощью команды Move.(Скриншот №4).

Скриншот №4

     Теперь давайте научим нашего персонажа прыгать. Тут все просто. В методе Jump() создадим проверку о нахождении персонаж на поверхности и нажата ли кнопка пробел. Если все условия соблюдены присвоим переменной прыжка силу прыжка (Скриншот №5). 

Скриншот №5

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

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии