プレイヤーの衝突(Player Collisions)
Udonには、プレイヤーとオブジェクトが衝突したことを検知する方法が3つあります。Triggers(トリガー)、Physics(物理演算)、そしてParticles(パーティクル)です。
トリガー
プレイヤーが特定のエリアに出入りしたことを検知したい場合は、OnPlayerTrigger イベントを使用するのが最適です。これには以下の3種類があります。
- OnPlayerTriggerEnter: プレイヤーのカプセルがトリガーコライダーに侵入したときに呼び出されます。
- OnPlayerTriggerStay: プレイヤーのカプセルがトリガーコライダー内にある間、フレームごとに呼び出されます。
- OnPlayerTriggerExit: プレイヤーのカプセルがトリガーコライダーから退出したときに呼び出されます。

これらのイベントを使用するには、collider コンポーネントを持つオブジェクトを追加し、そのコライダーの「Is Trigger」ボックスを有効にしてください。トリガーコライダーを使用すると、オブジェクトやプレイヤーはその中を通り抜けることができ、コライダーを持つオブジェクトが通過した際にイベントが呼び出されます。詳細については Collision in Unity's documentation を参照してください。
プレイヤーがコライダーの内外へテレポートした場合や、非常に高速で移動している場合など、これらのイベントの一部がスキップされるエッジケースがいくつか存在します。
物理演算 (Physics)
弾むボールや弾丸のように、物理演算で動かしているオブジェクトに対して使用できる一連のイベントがあります。これらのオブジェクトは IsTrigger がオフに設定された Collider を持っており、環境や他のオブジェクトと相互作用します。
これらの Collider でイベントを検知するには、以下を使用します。
- OnPlayerCollisionEnter: プレイヤーのカプセルが
Colliderに侵入したときに呼び出されます。 - OnPlayerCollisionStay: プレイヤーのカプセルが
Collider内にある間、フレームごとに呼び出されます。 - OnPlayerCollisionExit: プレイヤーのカプセルが
Colliderから出たときに呼び出されます。 - OnControllerColliderHitPlayer:
CharacterControllerがプレイヤーに衝突したときに呼び出されます。
これらのイベントは、プレイヤーが静止しているオブジェクトに「歩いて接触した」場合には呼び出されません。そのケースを処理したい場合は、Trigger Collider を使用してください。
パーティクル
最後に、Particle SystemのCollisionとSend Collision Messagesが有効になっている場合、OnPlayerParticleCollisionを使用してパーティクルがプレイヤーと衝突したことを検知できます。

例
Udon example scene では、プレイヤーの衝突を検知する3つのすべてのメソッドの使用方法が紹介されています。

最終更新: