Unity3D :Character Controller component reference

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生

Character Controller component reference

角色控制器 (Character Controller) 主要用于第三人称玩家控制或者是不使用__刚体__物理组件的第一人称玩家控制。

属性

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

详细信息

传统末日风格的第一人称控制在现实中并不真实。该角色每小时能跑 90 英里,可以立即停止并急转弯。因为该角色非常不真实,所以使用刚体和物理组件来创造这种行为有点不切实际,并会让玩家产生错觉。解决方案是使用专门的角色控制器。角色控制器只是一个胶囊形状的__碰撞体__,可以通过脚本来命令这个碰撞体向某个方向移动。然后,控制器将执行运动,但会受到碰撞的约束。控制器将沿着墙壁滑动,走上楼梯(如果低于 Step Offset 值),并走上 Slope Limit 设置范围内的斜坡。

控制器本身不会对力作出反应,也不会自动推开刚体。

如果要通过角色控制器来推动刚体或对象,可以编写脚本通过 OnControllerColliderHit() 函数对与控制器碰撞的任何对象施力。

另一方面,如果希望玩家角色受到物理组件的影响,那么可能更适合使用刚体,而不是角色控制器。

微调角色

可以修改 HeightRadius 属性来适应角色的网格。对于人形角色,建议始终使用 2 米左右的值。如果轴心点并非刚好在角色的中心,还可以修改胶囊体的 Center 属性。

Step Offset 属性也可能有影响,对于身高 2 米的人,请确保此值在 0.1 到 0.4 之间。

Slope Limit 不应太小。通常,使用 90 度的值效果最佳。由于胶囊体形状的原因,角色控制器将无法爬墙。

Don’t get stuck

要正确调整角色控制器,__Skin Width__ 属性是最重要的属性之一。 如果角色被卡住,那么很可能是因为 Skin Width 设置过小。Skin Width 允许对象轻微穿透控制器,但可消除抖动并防止被卡住。

最好是让 Skin Width 的值至少大于 0.01 并且比 Radius 的值大 10%。

建议将 Min Move Distance 保持为 0。

请参阅此处的角色控制器脚本参考

提示

  • 如果发现角色经常被卡住,请尝试调整 Skin Width
  • 如果是自己编写脚本,则角色控制器可能会影响使用物理组件的对象。
  • 对象无法通过物理组件来影响角色控制器。
  • 请注意,在 Inspector 中更改角色控制器属性将在场景中重新创建控制器,因此任何现有的触发器触点都将丢失,并且在再次移动控制器之前,不会收到任何 OnTriggerEntered 消息。
  • 在查询中使用的角色控制器胶囊体(比如射线投射)可能会略有缩小。因此,在某些极端情况下,即使查询似乎命中了角色控制器的辅助图标,但实际可能未命中。

3D建模学习工作室整理翻译,转载请注明出处!

上一篇:Unity3D :字符控制简介 (mvrlink.com)

下一篇:Unity3D :Introduction to Rigidbody physics (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号