Unity入門シリーズ第3弾!ColliderとRigidbodyを使って衝突判定をし、爆発アニメーションを表示させましょう。
Colliderで衝突判定をする
Colliderとは
Colliderを使うとオブジェクトとオブジェクトの衝突判定をすることができます。
また衝突判定の後アニメーションを表示したりオブジェクトを消したりという動作をさせたい場合はRigidbodyも合わせて使います。
Colliderを付ける
ヒエラルキービューでColliderを付けたいオブジェクトを選択し、Inspectorにある「Add Component」ボタンをクリックします。
「Physics 2D」からColliderを選択します。今回はCircle型のColliderにしてみます。
緑色の丸がColliderです。Edit Colliderで大きさを変えることもできます。
「Is Trigger」にもチェックを入れておきます。
「Is Trigger」はCollider同士のすり抜けに関するプロパティで、チェックが入っているとすり抜けるようになります。入っていないと衝突した後跳ね返ります。
今回は障害物のオブジェクトをTranslate関数で動かすように設定しているので、「Is Trigger」にチェックを入れていないと衝突判定することができません。
Translateではなくrigidbodyで動かすようにすれば跳ね返りも実装できるのですが、入門編としては難易度が上がってしまうのでここでは使わないようにします。
操作するキャラクターにもColliderを付けます。
またキャラクターの方にはRigidbody 2Dも付けます。
どちらかのColliderにRigidbodyを付けないと衝突判定できません。
RididbodyのBody TypeはKinematicにしておきましょう。Kinematicはスクリプトで操作するオブジェクトのことです。Dynamicのままにしておくとオブジェクトに重力が働いて自然に落下してしまいます。
衝突するアニメーションを付ける
アニメーションをAsset Storeからインポートする
「Window」-「Asset Store」を選択します。
フィルターで無料のものだけなど設定できます。
今回はこちらのアニメーションを使いました。
インポートするとプロジェクトビューのAssetsの中に取り込まれます。
取り込んだAnimationsフォルダのExplosionを選択しLoop Timeのチェックをはずします。
チェックが入っているとアニメーションが繰り返し再生されます。
衝突時の処理を書く
第2弾で作成した障害物を動かすスクリプトに処理を追記します。
スクリプトファイルをダブルクリックで開き、次の処理を追記します。
public GameObject explosionPrefab;
void OnTriggerEnter2D(Collider2D coll)
{
Instantiate(explosionPrefab, transform.position, Quaternion.identity);
Destroy(gameObject);
Destroy(coll.gameObject);
}
OnTriggerEnter2Dは「Is Trigger」に設定しているColloderの衝突時に呼ばれるメソッドです。
このスクリプトではInstantiateで爆発アニメーションのプレハブを生成し、障害物オブジェクトとキャラクターを削除しています。
障害物オブジェクトのInspectorで爆発アニメーションのプレハブを設定する欄ができるので、インポートしたアニメーションのプレハブをドラッグ&ドロップします。
実行する
実行してキャラを障害物にぶつけると爆発アニメーションが表示されることを確認してください。