[Unity] オブジェクトの衝突判定をする

オブジェクトにオブジェクトが当たった時に何かしらのアクションを発生させる場合の方法のメモ

(クリックで再生)

やりたいことは、何かしらのオブジェクトが別オブジェクトに当たった時に指定の処理を起こしたい…という内容。
上のサンプルでは、スフィアがキューブに当たった場合、スフィアを削除しています。

サンプルは公式Helpのまんまをコピペして使用しています。
今回の場合、このサンプルをキューブ側にアタッチさせています。

が、単純にスフィアとキューブを作ってアタッチするだけではうまくいきませんでした。
重要なのが下の要素で

1 各オブジェクトに、衝突判定用のPhysics(Collider)が入っていること
2 ColliderにIsTriggerが入っていること
3 オブジェクトのいずれかにRigidBodyが入っていること

この3つです。

Unity上でプリミティブを作った場合は、自動でセットされているのですが、Mayaからモデルを持ち込んだ場合
Colliderは入っていないのでセットする必要があります。
また、IsTriggerが入っていないと、物理シミュレーションでオブジェクトが動いてしまうので
スクリプトで動作を入れたい場合はIsTriggerをいれてあげます。

さらに、RigidBodyを追加。
これに気が付かずに、いくらやっても衝突判定がおきなくて???になりました。
RigidBodyは、衝突判定用にいれてるものなので、UseGravityはOffにします(入れると重力で落ちていく)

スクリプトの引数でうけとるColliderは、
「スクリプトをアタッチしているオブジェクトに衝突したオブジェクト」
が入ってきます。
今回の場合、キューブにスクリプトをアタッチしているので、それにあたったスフィアを受け取っていることに。
なので
衝突→したオブジェクトを取得→Destroyでオブジェクトを削除
という流れになっているわけですね。

コンポーネントの関係だとか、スクリプトでの取得とか
慣れないと地味に混乱する今日この頃…地道にがんばろう(´・ω・`)

コメントを残す

メールアドレスが公開されることはありません。

*