0%

Unity-CharacterController 碰撞与触发器之间关系

前言

自从接触了 CharactorController 来控制角色后,异常的有意思,对于控制一些人形角色控制上带来了便利,化简了刚体控制中种种麻烦问题。
但是也遇到了 CharactorController 与碰撞体和触发器之间的问题和疑问。

角色控制器

CharactorController 其自身包含一个胶囊碰撞体,自身也用于类似刚体的属性,因此并不需要为拥有 CharactorController 的对象添加 刚体 。一般而言也不需要添加另外添加碰撞体,但面对一些复杂情况需要额外的碰撞器来处理,那么问题就在于 CharacterController 自带的碰撞器 与 常规碰撞器(collider)之间有何关系有何区别,与触发器(trigger)联系。

特点与联系

前提,A对象 拥有刚体和碰撞器,B对象 拥有角色控制器。

A不开启触发器( isTrigger = false ) , 与 B 接触会发射碰撞效果,但是 onCollider... 是无法检测到的,可被 void OnControllerColliderHit(ControllerColliderHit hit) 检测到,简单地说 onControllerColliderHit 代替了原有的 onCollider... 碰撞检测。 (仅对 characterController 与 碰撞体间有效)

A开启触发器 , B 会穿过 A ,两者同时可以被 onTrigger... 检测到,onControllerColliderHit() 将不再有反应。

总结

总结一下就是 角色控制器 中的 onControllerColliderHit() 代替了原有的 onCollider... 方法,而 触发器检测 onTrigger... 没有影响。

这里再强调一下,触发器 ( trigger ) 至少一方拥有刚体,且至少一方开启 trigger 。(当然没开启 trigger 的对象是检测不到 trigger 的)