うら干物書き

ゲームを作っています。

Unityちゃんゲームジャムの復習 その一

 先週の土日に、ユニティちゃんゲームジャム大阪会場に行ってきましたよ。

 疲れましたが、大変楽しいイベントでした。

 ゲームジャムなどの感想は、今週の土曜日にあるUnity勉強会にて反省会が行われるそうなので、そのときにまた。

 さて、今回30時間という短い時間の中でゲームを作っていたわけですが、その中で学んだ点などを復習していこうかなと思います。

 ではまずUnityの基本機能の一つであるCollisionについて復習してみたいと思います。


 このようなサンプルプロジェクトを用意しました。

f:id:urahimono:20160718212809p:plain

 UnityちゃんとブロックのGameObjectには、OnCollisionEnter2D()OnTriggerEnter2D()の関数を記述したスクリプトを埋め込んでおります。

 各関数が呼ばれたら下のテキストにメッセージを送るよ、という簡単プロジェクトです。

 ではまず最初にUnityちゃんとブロックのGameObjectにColliderのみ埋め込んでみましょう。

f:id:urahimono:20160718212811p:plain

 その状態でUnityちゃんをブロックにぶつけてみましょう。

f:id:urahimono:20160718212813p:plain

 何もおこりませんね。

 Triggerフラグの有無も関係ありません。

 ではUnityちゃんのGameObjectにRigidbodyを付けてみましょう。

f:id:urahimono:20160718212815p:plain

f:id:urahimono:20160718212817p:plain

 Unityちゃんがブロックにぶつかって、それ以上先に進めなくなっています。

 ではUnityちゃんのGameObjectからRigidbodyを外し、ブロックのGameObjectにRigidbodyを付けてみましょう。

f:id:urahimono:20160718212819p:plain

 Unityちゃんがブロックを押し出しました。

 両方のGameObjectにRigidbodyを付加した場合も同じ現象が起きますが、

 UnityちゃんのGameObjectにRigidbodyがあるときに比べるとスムーズには動きません。

 ではUnityちゃんのColliderのTriggerフラグをOnにしてみましょう。

f:id:urahimono:20160718212821p:plain

 見事に素通りします。

 この結果は両方のColliderのTriggerの有無、Rigidbodyの有無に関係なく、

 どちらかのGameObjectにRigidbodyがあり、尚且つどちらかのColliderのTriggerがOnになっていれば同じ結果になりました。

 まあこの結果は、下記のサイトに詳しく書いてあったんですけどね。

https://code.google.com/p/vga-unity/wiki/GP10UnityCourse08

 とりあえず結論としては、

 Colliderだけでは機能しないよ。Rigidbodyが必要だよ。

 ということですね。

 ちなみに今回のゲームジャムにて、OnTriggerEnter2Dが呼ばれないというエラーが発生しました。

 もともとスクリプトに書いてあったOnCollisionEnter2Dの関数をコピペして、

 OnTriggerEnter2Dの処理を記述したのですが、何故かOnTriggerEnter2Dが呼ばれない。

 理由はこちら。

 'void OnCollisionEnter2D(Collision2D coll)'

 'void OnTriggerEnter2D(Collider2D other)'

引数の型が違うのかよぅ……。

コピペミスには気をつけよう!!