玩家碰撞
Udon 有三种检测玩家与对象碰撞的方式——触发器、物理和粒子。
触发器
如果你想检测玩家何时进入或离开某个区域,最好使用 OnPlayerTrigger 事件。有三个这样的事件:
- OnPlayerTriggerEnter 当玩家的胶囊体进入触发器碰撞器时调用
- OnPlayerTriggerStay 当玩家的胶囊体位于触发器碰撞器内部时每帧调用
- OnPlayerTriggerExit 当玩家的胶囊体离开触发器碰撞器时调用

要使用这些事件,添加一个具有碰撞器组件的对象,并在碰撞器上启用"Is Trigger"框。触发器碰撞器允许对象和玩家穿过它,并在这些对象有碰撞器时调用事件。你可以在Unity 文档中了解有关碰撞的更多信息。
danger
在某些边缘情况下,这些事件中的一个可能被跳过,例如当玩家传送进/出碰撞器或移动速度非常快时。
物理
还有另一组事件可用于你使用物理移动的对象,如弹跳球或子弹。这些对象有 IsTrigger 关闭的碰撞器,以便它们与环境和其他对象交互。
要检测这些碰撞器上的事件,你可以使用:
- OnPlayerCollisionEnter 当玩家的胶囊体进入碰撞器时调用。
- OnPlayerCollisionStay 当玩家的胶囊体位于碰撞器内部时每帧调用。
- OnPlayerCollisionExit 当玩家的胶囊体离开碰撞器时调用。
- OnControllerColliderHitPlayer 当 CharacterController 碰到玩家时调用。
OnPlayerCollision 事件适用于移动对象
当玩家"走进"静止对象时,不会调用这些事件。如果你想处理这种情况,请使用触发器碰撞器。
粒子
最后,你可以使用 OnPlayerParticleCollision 检测粒子何时与玩家碰撞,前提是该粒子系统已开启 Collision 和 Send Collision Messages。
示例
Udon 示例场景演示了如何使用所有三种方法检测玩家碰撞。
