徳島ゲーム開発ごっこ 技術ブログ

ゲームを作るために役に立ったり立たなかったりする技術を学んでいきます!

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)'

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

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