Version: 5.3 (switch to 5.4b)
Capsule Collider
Character Joint

Character Controller

Компонент Character Controller в основном используется для управления от третьего или первого лица, где не требуется физика Rigidbody.

Свойства

Свойство: Функция:
Slope Limit Ограничивает возможность коллайдер взбираться по склонам только по склонам равным или меньше чем указанное значение.
Step Offset Персонаж переступит на поверхность, только если она ближе к земле, чем заданное значение.
Skin width 2 коллайдера могут пересечься друг с другом на глубину, равную значению Skin Width. Большее значение уменьшит степень тряски. Слишком низкое значение может вызвать застревание персонажа. Наилучшим вариантом является установление этого значения равным 10% от радиуса.
Min Move Distance Если персонаж попробует сдвинуться ниже указанной величины, то он не сдвинется. Это может быть использовано, чтобы уменьшить тряску. В большинстве ситуаций это значение стоит оставить равным нулю(0).
Center Сдвиг коллайдера в мировом пространстве без влияния на то, как вращается персонаж.
Radius Значение радиуса коллайдера. По сути дела, это ширина коллайдера.
Height Высота коллайдера Capsule Collider персонажа. Изменение её растянет коллайдер вдоль оси X в оба направления.
Компонент Character Controller
Компонент Character Controller

Детали

Традиционное управление от первого лица в стиле Doom не реалистично, с точки зрения физики. Персонаж бежит со скоростью 90 миль в час, останавливается мгновенно и поворачивается за считанные мгновения. Т.к. это нереалистично, использование Rigidbody и физики чтобы создать подобное управление непрактично и эффект будет не тот. Решением является специализированный Character Controller. Он просто создаёт коллайдер (Collider) в форме капсулы, который можно двигать в некотором направление при помощи скрипта. Controller позаботится о движении, но столкновения его сдерживают. Он будет скользить вдоль стен, подыматься по лестницам (если ступеньки ниже чем Step Offset) и ходить по наклонам учитывая Slope Limit.

Controller не реагирует на силы сам по себе и не отталкивает Rigidbody объекты автоматически.

Если вы хотите толкать Rigidbody-тела или объекты, использующие Character Controller, вы можете применить силы к любому объекту, в которого он врезается, через скриптинг при помощи функции OnControllerColliderHit().

С другой стороны, если вы хотите, чтобы персонаж игрока подвергался влиянию физику, то возможно вам было бы лучше использовать Rigidbody вместо Character Controller.

Настройка персонажа до желаемого результата

Вы можете менять значения Height и Radius для соответствия коллайдера мешу персонажа. Для человекоподобных персонажей рекомендуется использовать высоту около 2-х метров. Вы также можете изменить центр (Center) капсулы в случае, если точка вращения (pivot) не соответствует точному центру персонажа.

Значение Step Offset тоже важно при настройке, убедитесь, что это значение находится в диапазоне между 0.1 и 0.4 для 2-х метровых гуманоидов.

Slope Limit тоже должен быть не слишком маленьким. Зачастую использование значения в 90 градусов подходит лучше всего. Character Controller не сможет ползать по стена в виду формы капсулы.

Как не застрять

Skin Width одно из самых критических свойств для верной настройки Character Controller. Если вам персонаж застрял, то скорее всего ваше значение Skin Width слишком мало. Skin Width позволяет объектам слегка пересекать Controller, но уменьшает тряску и защищает от застревания.

Достаточно неплохой практикой является сохранение значения Skin Width как минимум больше чем 0.01 и и больше чем 10% радиуса коллайдера (Radius).

Мы рекомендуем оставлять значение Min Move Distance равным 0.

См. справку по скриптингу Character Controller здесь

Вы можете скачать проект-пример, демонстрирующий предустановленных анимированных и движущихся Character Controller’ов, с нашего вебсайта здесь Resources

Советы

  • Попробуйте настроить значение Skin Width, если ваш персонаж застревает достаточно часто.
  • Character Controller может влиять на объекты использующие физику, если вы пишете свои скрипты.
  • На Character Controller не могут влиять объекты при помощи физики.
  • Учтите, что изменение свойств компонента Character Controller в инспектора повлечёт пересоздание контроллера в сцене, таким образом, любые существующий контракты-триггеры будут потеряны и у вы не получите сообщение OnTriggerEntered, пока контроллер не продолжит движение.
Capsule Collider
Character Joint