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 в оба направления.
The Character Controller
The 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 не сможет ползать по стена в виду формы капсулы.

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

The Skin Width is one of the most critical properties to get right when tuning your Character Controller. If your character gets stuck it is most likely because your Skin Width is too small. The Skin Width will let objects slightly penetrate the Controller but it removes jitter and prevents it from getting stuck.

Достаточно неплохой практикой является сохранение значения 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