Unity 衝突判定
今回は、Unityの「衝突判定」について書きます。
まずはじめに、衝突判定をするやり方を書いていきます。
①オブジェクトに「RigidBody」を追加します。
これを追加しないと、判定されないので、忘れないでください。
②Scriptに次のコードを書きます。(Javascript)
function OnCollisionEnter () { Debug.Log("hit!!"); }
以上です。簡単ですね(笑)
それでは、実際に上のコードを使い、試してみます。
このようなものを作りました↓
球を動かし、左右にある壁に当ててみます。
Scriptは、こんな感じです。
#pragma strict function Start () { Debug.Log("start"); } function Update () { var x : float = Input.GetAxis("Horizontal"); var y : float = Input.GetAxis("Vertical"); transform.Translate(x * 0.2, 0, y * 0.2); if (Input.GetKey("space")) { transform.position.y += 0.1; } if (Input.GetKey("left shift")) { transform.position.y -= 0.1; } } function OnCollisionEnter () { Debug.Log("hit!!"); }
実行すると・・・
「hit!!」と出てるので、衝突判定できてます。
で、衝突判定のメッソドは「OnCollisionEnter 」だけではありません。
衝突判定のメッソドには、これらがあります。
- OnCollisionEnter
- OnCollisionStay
- OnCollisionExit
「OnCollisionEnter」は、他オブジェクトと衝突した瞬間に呼ばれるメソッドです。基本的に衝突につき一回しか呼ばれません。
「OnCollisionStay」は、他オブジェクトと触れている間に呼ばれるメソッドです。触れている間は、メソッドが呼ばれます。
「OnCollisionExit」は、衝突した他オブジェクトから離れた瞬間に呼ばれるメソッドです。基本的に衝突につき一回しか呼ばれません。
それぞれをコードで書くとこんな感じです。(javascript)
function OnCollisionEnter () { Debug.Log("hit!!"); } function OnCollisionStay(){ Debug.Log("touch"); } function OnCollisionExit(){ Debug.Log("he"); }
この辺は実際に試してみたほうが、分かりやすいです。
次に、引数について書きます。
衝突判定のメッソドの引数には、「Collision」オブジェクト というものがあります。
OnCollisionEnter(Collision collision) OnCollisionStay(Collision collision) OnCollisionExit(Collision collision)
「collision.gameObject」とすると、衝突した相手の情報を取得できます。
こんな感じに使います。(javascript)
function OnCollisionEnter (obj :Collision) { if(obj.gameObject.name == "kabe"){ Debug.Log("hit1"); }else{ Debug.Log("hit2"); } }
右にあるオブジェクトは「kebe」という名前で、球が「kabe」に衝突すると「hit1」と表示されます。それ以外に衝突したら、「hit2」と出ます。
これで、終わります。