通勤電車の中で書くブログ

通勤電車の外で書く時もあります。

未経験者がUnityでスマホゲームを作る4

前回はカニを左右に動かせるようにし、さらにスマートフォンの実機にビルドすることができた。

donou.hatenadiary.com

 

4-1

今作っているものはゲームに近づいてはきているものの、まだまだゲームとは呼べない代物である。そもそも、何をするゲームなのか、という根幹のところが決まっていない。本当はゲームの開発を始める前に、どのようなゲームを作るか構想を練り、計画を立ててから着手するべきであるが、なにぶんUnityについて知らない事が多すぎて、本の見よう見まねだけでここまできてしまった。(と言いつつ、実際はどのようなゲームを作りたいか色々と事前に考えてはいた。しかしながらやりたい事がそもそも可能なのかどうかも分からないため、あまり最初から決めすぎずに手を動かして慣れていくのが先決だろうとの考えに至ったため、このような進め方になった。)

しかしそろそろこの辺で、どのようなゲームにするか、決めておくべきだろう。あまりこだわりすぎず、今ある土台(カニと空と地面、そしてカニを左右に動かす仕組み)を活かしてゲームを作るとしたら何が良いか考え、一つの結論に至った。

それは、上から落ちてくるものに当たると得点するタイプのゲームだ。あいにくそのようなゲームの例が思い浮かばないが、割とよくある類のものだと思う。上から食べ物が降ってきて、それを取ればポイント、また敵も降ってきてそれに当たるとゲームオーバーになる、そんな感じのゲームにしよう。

 

4-2

ゲームの大枠が決まったので、これからは完成イメージに向けて足りない要素を埋めていく作業となる。まずは上から降ってくる物体に着手しよう。

上から降ってくる物体は2種類ある。一つは当たるとポイントになるもの、もう一つは当たるとゲームオーバーになるものだ。前者はおにぎり、後者はカラスと決めた。つまり、このゲームは、「カラスを避けながら、いかに多くのおにぎりを食べる事ができるかを競うゲーム」ということになる。

例によってペイント3Dでおにぎりとカラスの絵を描き、それらの画像データをUnityの assetの中に放り込む。これらの目指す動きとしては、ランダムに空に現れて、下に落下することを繰り返すような動きをしてくれれば理想的だ。しかしどうやってこれを実現するか。とりあえず手元の本のページをめくると、参考になる内容が載っていた。その本では、ある物体を沢山のランダムな場所に出現させる方法が説明されていた。概要としては、物体のオリジナルを作り、ゲーム上ではオリジナルのコピーを出現させるようなやり方だ。この方法の良いところは、オリジナルに特性を付与すると、コピーにもその特性が引き継がれることだ。だから同じキャラクターや物体が複数登場するゲームではよく使われる方法らしい。

ここでいうオリジナルのことを、Unityでは「プレハブ」という。おにぎりやカラスも登場は一回きりではなく、何度も出現しては消える存在なので、プレハブを作るやり方が適していると言える。ところで、おにぎりとカラスは、動きとしてはほぼ同じなので、ここからはおにぎりに絞って話を進めていく。

 

4-3

まず、おにぎりのプレハブを作り、それに物理特性を付与した。これにより、おにぎりが空に出現すると自動的に下に落ちることになる。次に、おにぎりが自動で繰り返し出現する仕組み、いわばおにぎり工場を作らなければならない。ゲームの要素に「おにぎり工場」を追加し、そこにおにぎり工場を稼働させるスクリプトを紐づける。おにぎり工場のスクリプトは、本に載ってい物体をランダムに出現させるスクリプトを真似れば簡単だ。これにより、指定した頻度で、指定した範囲内のランダムな場所におにぎりを出現させることができるようになった。

 

4-4

さてこの状態でゲームを動かしてみると、ちょっとした問題が生じる。おにぎりが降ってくるのは良いが、それがだんだん地面に積もり積もって、画面がおにぎりだらけになってしまうのである。こちらの意図としては、降ってきたおにぎりは地面に落ちるのではなく、地面をすり抜けて消え去ってほしいところだ(おにぎりが積もり積もった状態は、ビジュアルとしては面白いが)。しかし、これはどのようにして実現すればよいだろうか。おにぎりが地面に残り続けるのは、物理特性の付与によって実体を持った物体になっているからだ。そう考えると、物理特性を付与しない方がいいのではないか、という事で、物理特性をOFFにしてみると、今度はおにぎりに重力がかからず、いつまでも空中に浮遊するようになってしまった。これは困ったことだ。地面をすり抜けるようにすると重力がかからなくなり、重力がかかるようにすると地面をすり抜けられない。

地面をすり抜けることと、重力がかかること、両方の条件を満たすおにぎりは作れないのだろうか。