Unity 2Dシューティング の当たり判定で重要なポイント

Unityで2Dシューティングをおためし作成していて、当たり判定の考え方がよくわからなかったのでまとめおくことにします。Unityは点で作成するといよりもすべてがつながっている感じなので当たり判定の部分だけ書いてもわかりづらい可能性はあります。

スポンサーリンク

Unity2Dの当たり判定で重要なこと

Unity2Dの当たり判定で重要な点をいくつか書いていきたいと思います。

  • 衝突する2つのオブジェクトにcolliderを追加する(inspectorのadd componentから追加する)
  • どちらか一方のオブジェクトにはrigidbody2Dを追加しておく(inspectorのadd componentから追加する)
  • 受け側のis Triggerにチェックをいれておく

collideは日本語にすると「衝突する」という意味になります。colliderは衝突していくほうされるほうどちらにもcomponentを追加しておきます。rigidbody2Dはどちらか一方に必ずcomponentを追加しておきます。やってみればわかるのですがrigidbody2Dがないと衝突判定がされません。

当たり判定に関係するコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BulletScript : MonoBehaviour {
	public GameObject explosionPrefab;

	// Use this for initialization
	void Start () {

	}

	// Update is called once per frame
	void Update () {
		transform.Translate(0, 0.2f, 0);
		if(transform.position.y > 5){
			Destroy(gameObject);
		}
	}

	void OnTriggerEnter2D(Collider2D coll) {
		Instantiate (explosionPrefab, transform.position, Quaternion.identity);
		Destroy (coll.gameObject);
		Destroy (gameObject);
	}
}

コードの解説

衝突に関係するコードは21行目は25行目です。衝突の判定はOnTriggerEnter2Dで行います。OnTriggerEnter2Dは公式によると以下のような役割があるようです。

オブジェクトにアタッチしたトリガーの中に別のオブジェクトが入ったときに呼び出されます。(2D 物理挙動のみ)入ったオブジェクトに関する詳細な情報は呼び出し時に渡される Collision2D 引数に代入されます。

この文章はぱっとみてピンとこないのですが「トリガーの中に別のオブジェクトが入ったときに呼び出されます。」という文章に注目します。このことから、is Triggerのチェックは受け側で行う必要があるということです。

つくっているゲームが弾をうって岩に当たったら消えるという表現をしたい場合は岩のほうにis Triggerをチェックをいいれるということになります。
collider unity

OnTriggerEnter2Dメソッドの引数collはなにが入っているかというと、公式では「入ったオブジェクトに関する情報」と表現されています。←これははっきりいってめちゃくちゃわかりにくいです。このゲームでいうと受け側(岩)になります。Destroy(coll.gameObject);で岩を消しているということになります。
sampleshooting

スポンサーリンク

Unity2Dの当たり判定まとめ

Unity2Dの当たり判定は結構わかりにくい上に当たり判定と当たったときの処理はプログラムで実装する必要があるので結構難しいです。ですが、最初に書いたポイントをおさえるのと、コードの意味を少し理解できれば、「弾にあったたら消す」くらいの実装は理解できるはずです。Unityがはじめてでなにがなんだかさっぱりだという方はdotinstallでunityレッスンが無料でうけられるのでそちらを受けるのがよいです。というか筆者もさっぱりです。

コメント

タイトルとURLをコピーしました