プレイヤーの衝突(Player Collisions)
Udonには、プレイヤーとオブジェクトの衝突を検知する方法が、Triggers、Physics、Particlesの3つ存在します。
Triggers
プレイヤーが特定のエリアに出入りしたことを検知したい場合は、OnPlayerTriggerイベントを使用するのが最適です。これには以下の3種類があります:
- OnPlayerTriggerEnterは、プレイヤーのカプセルがTrigger Colliderに入った際に呼び出されます。
- OnPlayerTriggerStayは、プレイヤーのカプセルがTrigger Collider内に留まっている間、フレームごとに呼び出されます。
- OnPlayerTriggerExitは、プレイヤーのカプセルがTrigger Colliderから出た際に呼び出されます。

これらのイベントを使用するには、Colliderコンポーネントを持つオブジェクトを追加し、そのコライダーの「Is Trigger」チェックボックスを有効にします。トリガーコライダーを設定すると、オブジェクトやプレイヤーはその中を通り抜けられるようになり、コライダーを持つオブジェクトが通過する際にイベントが呼び出されます。Unityドキュメントのコリジョン(衝突)に関するページで詳細を確認できます。
プレイヤーがコライダー内へテレポートしたり外へ出たりする場合や、非常に高速で移動している場合など、一部の特殊なケースではこれらのイベントがスキップされることがあります。
Physics
跳ねるボールや弾丸のように、物理演算で移動させるオブジェクトを使用する場合に利用できる、別のイベント群があります。これらのオブジェクトでは「IsTrigger」をオフにしたColliderを使用するため、環境や他のオブジェクトと相互作用します。
これらのColliderでイベントを検知するには、以下を使用します:
- OnPlayerCollisionEnter は、プレイヤーのカプセルがColliderに入った時に呼び出されます。
- OnPlayerCollisionStay は、プレイヤーのカプセルがCollider内に留まっている間、フレームごとに呼び出されます。
- OnPlayerCollisionExitは、プレイヤーのカプセルがColliderから出た時に呼び出されます。
- OnControllerColliderHitPlayerは、CharacterControllerがプレイヤーに接触した時に呼び出されます。
これらのイベントは、プレイヤーが静止しているオブジェクトに「歩いてぶつかった」場合には呼び出されません。その状況を処理したい場合は、Trigger Colliderを使用してください。
Particles
最後に、Particle SystemのCollisionおよびSend Collision Messagesが有効になっていることを前提として、OnPlayerParticleCollisionを使用してパーティクルがプレイヤーと衝突した時を検知できます。
例
Udon example sceneでは、プレイヤーの衝突を検知する3つの方法すべてを使用するデモンストレーションを行っています。

最終更新: