Unity3DのCollider同志の衝突を判定する方法としてOnCollisionEnterメソッドを使う方法があります。(公式レファレンスページ) このメソッドはMonoBehaviourのメソッドとして定義します。ColliderまたはRigidBodyが他のColliderかRigidBodyと衝突するとき、このメソッドが呼び出されます。
しかし、ここで注意しなくてはいけないのがCollider同志では衝突イベントが発生しないということです。これは「両方のどっちかのオブジェクトは必ずKenematicではないRigidBodyコンポーネントを含んでいる必要があることを意味します。これは公式レファランスに書いてありますが、私は最初にレファランスを真面目に読んでなかったのでずいぶん苦労しました。
そして「Detonator Extension」について紹介しようと思います。これは爆発のエフェクトを簡単に作成することができるExtensionです。Unity3Dの公式HPにも紹介されていますが、それはUnity3D 2.xバージョン用のExtensionであり、Unity3D 3.0では互換性がありません。インポートしてもコンソールウィンドウがエラーだらけになるだけです。Unity3D 3.0と互換性のある最新バージョンはDetonatorの開発者のサイトでダウンロードできます。
このExtensionの使用方法はすごくシンプルで、Detonatorスクリプトを使って自分で新しい爆発を作るか、あらかじめ開発者が用意したPrefabを生成するだけです。Prefabは爆発の種類によって約10種類程度が用意されており、Detonator Baseという基本Prefabも用意されています。Detonatorスクリプトを修正するよりは、このDetonator BaseというPrefabの各パラメータを調整して新しい爆発を生成する方がもっと簡単で安全です。
[codesyntax lang=”csharp”]
public void SetExplose(Vector3 position, float detail) { GameObject explosionInstance = (GameObject)Instantiate(explosion, position, Quaternion.identity); Detonator detonator = explosionInstance.GetComponent<Detonator>(); detonator.detail = detail; Destroy(explosionInstance, life); }
[/codesyntax]
のように、爆発PrefabでInstaniateを用い新しいインスタンスを生成するだけです。爆発が終わってもオブジェクト自体は消えないのでDestroyメソッドで爆発が終わるまでの時間を余裕をもって指定します。これで簡単に爆発を使用できるようになります。
Detonator Extension以外にも有用なExtensionはたくさんあります。またの機会でほかのExtensionを紹介しようと思います。
2件のコメント