Unity3D OnCollisionEnterの使用法とDetonator Extension

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を紹介しようと思います。

作成者: kkc0923

KANOTYPE管理者。

2件のコメント

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Loading...