组件界面

https://docs.unity3d.com/cn/current/Manual/class-CharacterController.html

属性 功能:
Slope Limit 将碰撞体限制为爬坡的斜率不超过指示值(以度为单位)。
Step Offset 最大的爬楼梯高度该值不应该大于角色控制器的高度,否则会产生错误。
Skin width 两个碰撞体可以穿透彼此且穿透深度最多为皮肤宽度 (Skin Width)。较大的皮肤宽度可减少抖动。较小的皮肤宽度可能导致角色卡住。合理设置是将此值设为半径的 10%。
Min Move Distance 最低的移动距离,此设置可以用来减少抖动,在大多数情况下,此值应保留为 0。如果该数值很大,但代码中单位移动距离很低,角色就不会动。
Center 此设置将使胶囊碰撞体在世界空间中偏移,并且不会影响角色的枢转方式。
Radius 胶囊碰撞体的半径长度。此值本质上是碰撞体的宽度。
Height 角色的胶囊碰撞体高度。更改此设置将在正方向和负方向沿 Y 轴缩放碰撞体。

注意点:

  • 一个游戏物体附加了角色控制器组件后,和角色控制器组件共存的其他的Colider组件是处于无效状态。
  • 和场景中其他物体的交互碰撞,是以角色控制器组件的边缘进行判断的。
  • 如果您希望您的玩家角色受到物理影响,那么您最好使用Rigidbody而不是CharacterController,CharacterController仅保留了刚体的部分特性。
  • 如果你想用角色控制器推动刚体或物体,你可以通过脚本通过OnControllerColliderHit()函数将力施加到它碰撞的任何物体上,类似于

角色移动

public CharacterController player;
​
void Update()
{
    float horizontal = Input.GetAxis("Horizontal");
    float vertical = Input.GetAxis("Vertical");
    //会应用重力
    player.SimpleMove(new Vector3(horizontal, 0, vertical) * 3f);
    //不会应用重力
    //player.Move(new Vector3(horizontal, 0, vertical)* 0.1f);
}
​
private void OnControllerColliderHit(ControllerColliderHit hit)
{
    Debug.Log(hit.gameObject.name);
}