Unity3d 入門 06 「衝突判定」

今回は衝突判定について説明します。
まず、ゲームオブジェクトのカメラ、光源、床、GUI Text、そして球を配置します。

さらに球には、コンポーネントの Rigidbodyと、新しいスクリプト NewBehaviourScript を貼り付けます。

NewBehaviourScript には以下のようなコードを書きます。

public class NewBehaviourScript : MonoBehaviour {
	void Start()
	{
	}
	void Update()
	{
	}
	void OnCollisionEnter(Collision collision)
	{
		GameObject gui = GameObject.Find("GUI Text");
		if(gui != null) gui.guiText.text = "Hit !";
	}
}

ではゲームを実行してみましょう。
球が床に着いた時に、Hit と表示されたでしょうか?


では、衝突するオブジェクトに応じて動作を変えたい時はどうするのでしょうか?
Collision クラスのプロパティの gameObject を使うことでできます。
この gameObject には衝突してきたオブジェクトのデータが入っており、
name やこれから説明する tag を使うことで動作の変更ができます。
ただ name を使うことで個別のオブジェクトの判定ができますが、
オブジェクトの数が増えてきた時、name の数もそれだけ増え管理が大変になります。
そこで、オブジェクトを一つのグループ化できる tag を使うことで楽に判定ができます。
tag の作り方・設定は次のように行います。
Inspector ビューから Tag > Add Tag を選択します。
空のエレメントに付けたい tag の名前を入れることで新しいタグができます。
ここでは、TestCollision としました。

続いて、球の Inspector ビュー内の tag で、新しくできた TestCollision を選択します。
これで、この球には TestCollision タグが付けられました!

続いて、NewBehaviourScript も以下のように編集します。
タグが TestCollision の時だけ、画面に Hit と出す、という処理になっています。

public class NewBehaviourScript : MonoBehaviour {
	void Start()
	{
	}
	void Update()
	{
	}
	void OnCollisionEnter(Collision collision)
	{
		if(collision.gameObject.tag != "TestCollision") return;
		GameObject gui = GameObject.Find("GUI Text");
		if(gui != null) gui.guiText.text = "Hit !";
	}
}

で、Hierarchy 上で球をいっぱい複製します。
ここでは球を2つ複製しました。

ゲームを実行しますと・・、
球が他の球に触れたときに、Hit と出るようになります!