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