読者です 読者をやめる 読者になる 読者になる

2Dゲームは終わらない〜Unityでお遊び〜

プログラミング超初心者がUnityを使って2Dゲームを開発するブログ

OnTriggerEnter2dで衝突しないのはIsTriggerが原因でした

Unityのチュートリアルの一つで、UFOを動かすものがあったので最初から最後までやってみた時に、一つだけつまづいた部分があったのでメモ。

 

やりたかったことは、プレイヤーを動かして、フィールド上のアイテムにはOnTriggerEnter2dで判定するんだけれども、フィールドの壁には衝突したいというケース。

 

チュートリアルの通りにやっていたはずが、アイテムにあたって判定に入るようになったけれども、壁を通り過ぎる。なぜ?

f:id:taris777:20161011211654p:plain

こちらが実際の画面。Playerである中央のUFOが黄色のアイテムに衝突すると、アイテム側が消えるようにScriptを書いていて、壁に当たったらColliderが貼ってあるので、衝突するものです。

 

原因→PlayerにIsTriggerをYesにしていた。

f:id:taris777:20161011211916p:plain

Playerに対して、こちらのIs Triggerをチェックしていると、すべての衝突判定時に衝突しなくなり、関数内に記述した動作のみを行うようになります。

 

対応→PlayerのIs Triggerを外し、アイテム側のIs Triggerにチェックを入れる。

こうすることで、アイテムへの衝突時はアイテムを消す動作をして、壁への衝突時は普通にぶつかるようにできます。

 

学んだこと→どのオブジェクトに対してIs Triggerをチェックするかをちゃんと気をつけること。

 

今後、複数のオブジェクトに対して衝突判定をやっていくことになると思うので、どれにIs Triggerを入れるかっていうのはちゃんと把握しておかなくちゃいけないなと思いました。

分かれば非常に簡単なことですが、初めて引っかかるとツライ。

 

 

それでは。