【Unity 2D】衝突判定について

  • |
【Unity 2D】衝突判定について
   

第8回目は、「衝突判定」です。
アクションゲームなどでは必ずと言ってもいいほど利用をします。今回はこの「衝突判定」についてブログに書いていきたいと思います。

前回:【Unity NGUI】フェードインとフェードアウトの実装 | albatrus.com

準備

Unityないで「衝突判定」を実装する場合、オブジェクトに以下のコンポーネントが必要となります。
  • Collider
  • RigitBody
2014-9-3-fdsada


[Collider]にはいくつか種類があるのですが、何かしら必ず必要となります。
今回は2Dなので、[Collider]も2Dのモノを利用しています。

衝突判定を実装する

ここからはスクリプトの記述となります。
Unityでは「衝突判定」を感知する便利なメソッドが複数あります。
この中から、ゲームの内容に合ったものを利用して下さい。

Triggerを利用する

[Collider]には[is Trigger]という項目があります。
これがTrue(選択)されている場合に、「衝突判定」を調べることができるのが「OnTriggerEnter2D」です。


    void OnTriggerEnter2D(Collider2D collision){

		Debug.Log("hit Object");

	}



ある場面では「衝突判定」をしたくない場合があると思います。
この時に[is Trigger]を調整しましょう。

Colliderについて

衝突判定を調べるために必要なのが、[Collider]です。
[Collider]とは、どこで衝突判定を認識するかの有効範囲のことです。
Unityには複数の[Collider]が用意されています。

BoxCollider2D

四角形のColliderです。
2014-9-3-box


有効範囲は[Shift]を押しながら移動させることで変更することが可能です。
2014-9-4-fdsa


CircleCollider2D

円のColliderです。
20140904-dadsada


PolygonCollider2D

[PolygonCollider2D]は自由に有効範囲を設定できます。
これも[Shift]を使うと「頂点の作成」「頂点の移動」ができるので、好きな範囲を作成しましょう。
201409040fdsasa

OnCollisionEnter2D

先ほどの「OnTriggerEnter2D」同様に、衝突判定を調べる際に「OnCollisionEnter2D」というメソッドがあります。

    void OnCollisionEnter2D(Collision2D coll) {


		Debug.Log("hit Object  COLLISION");

	}


しかし、これが思うように機能してくれません。

OnCollisionEnter2Dが働かない

衝突判定のテストでは以下の様に実験を行っていました。
2014-9-3-fdsas


コードはこのような感じです。

    void Update () {
	
		if(isMove){


			 transform.Translate(Vector2.right *0.6f *Time.deltaTime);

			 /*
			Vector3 addPos = transform.position;
			addPos.x += 0.2f * Time.deltaTime;
			transform.position = addPos;
			 */

			 /*
			Vector3 moveRigid = new Vector3(0.1f,0.0f,0.0f);
			rigidbody2D.velocity = moveRigid * speed;



			rigidbody2D.AddForce(Vector2.right *10);
                        */
		}
	}


オブジェクトの移動手段は色いろあるのですが、どれを試しても「OnCollisionEnter2D」が動いてくれません。
2つのオブジェクトには[BoxCollider2D]と[RigidBody2D]を追加しています。

OnCollisionEnter2Dが働らく場合

OnCollisionEnter2D」が働く場合があります。
2014-9-4-fdsasa


スクリプトを使わずに、重力を利用した落下には反応しました。
恐らく、スクリプトでの移動に対しては「OnCollisionEnter2D」は利用できないのかなと思っています。
もし、何か良い解決策があれば教えて欲しいです。

Related Posts Plugin for WordPress, Blogger...