VRChat UdonGraph (UdonSharp) CollisionとTrigger

VRChatでワールドギミックを作成する際に
「2つのオブジェクトが接触したら」や
「範囲に物体や人が入ったら」
といった条件を作成したい際に必要なColllisionとTriggerは種類がありすぎて把握が難しかったのでまとめました。

接触判定を取得できるオブジェクトの種類は
・プレイヤー(アバターサイズに関わらず一定サイズのカプセル形状)
・コライダ(isTrigger)
・コライダ(isTriggerではない)→(今後勝手にnotTriggerと書きます)
・パーティクル
があります。
これら同士の接触やTriggerをどこまで取れて便利か、です。

isTriggerは物理的な接触を避けて他のコライダと重なれるようにする、という機能です。なので片方もしくは両方にisTriggerがついている場合はその2つは重なり、両方ついていない場合のみ重ならない、という感じです。
押されて動くとかはRigidbody側、掴めるはVRCPickup側なので割愛。

また、AとBの接触を取得するプログラムはAもしくはBにアタッチする必要があります。表だと左側です。

Collision/Trigger 一覧

[Enter/Stay/Leave]あるものは
・Enter:入った時(前のフレームで外にあって現フレームで中だった時)
・Stay:入ってる時(前のフレームで中にあって現フレームで中だった時)
・Leave:出た時(前のフレームで中にあって現フレームで外だった時)
出現時と消失時は呼び出されないです。

OnParticleTriggerはParticleSystemの設定値[Trigger]部分で発生条件を調整できます。
ただ個人的には複雑なことをする場合はParticleSystemを条件に使わず、Particleっぽく見えるオブジェクトをアニメーションで動かすなどをおすすめします。(範囲内でParticleが消えたり、位置が同期されてなかったりなど問題は多)


この記事が気に入ったらサポートをしてみませんか?