Skip to main content

玩家碰撞

Udon 有三种检测玩家与对象碰撞的方式——触发器、物理和粒子。

触发器​

如果你想检测玩家何时进入或离开某个区域,最好使用 OnPlayerTrigger 事件。有三个这样的事件:

  • OnPlayerTriggerEnter 当玩家的胶囊体进入触发器碰撞器时调用
  • OnPlayerTriggerStay 当玩家的胶囊体位于触发器碰撞器内部时每帧调用
  • OnPlayerTriggerExit 当玩家的胶囊体离开触发器碰撞器时调用

一个简单的 Box Collider,勾选了"Is Trigger"。

要使用这些事件,添加一个具有碰撞器组件的对象,并在碰撞器上启用"Is Trigger"框。触发器碰撞器允许对象和玩家穿过它,并在这些对象有碰撞器时调用事件。你可以在Unity 文档中了解有关碰撞的更多信息。

danger

在某些边缘情况下,这些事件中的一个可能被跳过,例如当玩家传送进/出碰撞器或移动速度非常快时。

物理​

还有另一组事件可用于你使用物理移动的对象,如弹跳球或子弹。这些对象有 IsTrigger 关闭的碰撞器,以便它们与环境和其他对象交互。

要检测这些碰撞器上的事件,你可以使用:

  • OnPlayerCollisionEnter 当玩家的胶囊体进入碰撞器时调用。
  • OnPlayerCollisionStay 当玩家的胶囊体位于碰撞器内部时每帧调用。
  • OnPlayerCollisionExit 当玩家的胶囊体离开碰撞器时调用。
  • OnControllerColliderHitPlayer 当 CharacterController 碰到玩家时调用。
OnPlayerCollision 事件适用于移动对象

当玩家"走进"静止对象时,不会调用这些事件。如果你想处理这种情况,请使用触发器碰撞器。

粒子​

最后,你可以使用 OnPlayerParticleCollision 检测粒子何时与玩家碰撞,前提是该粒子系统已开启 Collision 和 Send Collision Messages。

此粒子系统已启用碰撞模块,设置为"World"和"3D"模式,并打开了"Send Collision Messages"。

示例​

Udon 示例场景演示了如何使用所有三种方法检测玩家碰撞。

查看 Udon 示例场景了解如何使用这些事件。