Unity勉強会に向けて(8)雪(だるま)が降る

引き続き、ドットインストールの「Unity入門(全26回)」をやりながら予習を進めていきましょう。#16あたりからの内容を一気に触っていきます。

ゲームで多用される「物体がじゃんじゃん自動生成される」という動作を作ってみます。せっかく雪だるまを作ったので、それを空から降らせてみましょう。

空のオブジェクトを作る
空のオブジェクトを作ります

無からなにかを生み出すことはUnityと言えども不可能なので、まずは母体となる空のオブジェクトを生成します。

雪だるまの処理
雪だるまにRIgid Bodyをつけておきます

雪だるまが重力に引かれて降ってくるようにするため、Rigid Bodyを付与して質量(mass)を設定します。

上で書いたように、物体を生み出すのはその母体となるオブジェクトです。なので、母体にスクリプトを付与し、そこに万物を生み出す命令を書いていきます。要点は

  • スクリプトにTransform型のグローバル変数(と呼んで良いのか?)を定義しておくと、GUIで初期値(すなわち、自動生成するオブジェクト)を指定できる

ということです。例えば、

雪だるま生成スクリプト
雪だるまを生成するスクリプトです

こんな風に書いて母体となるオブジェクトに貼り付けると、

Transformを設定
Transformを設定できます

こんな風にInspectorから生成するオブジェクトを指定できるようになります。ここでは母体が「SnowManBox」で、スクリプトが「SnowManBoxScript」です。最初は生成するオブジェクトが「None(Transform)」になっていますが、ここに予め作成しておいた雪だるまのPrefabをドロップしてやることで上記のとおり指定できます。

これで実行するとスペースキーを押す度に雪だるまが降ってきますが、このままだと無限に雪が積もってしまうので、床から滑り落ちたら消滅するようにしましょう。SnowManScriptに、消滅する条件を記述しておきます。要点は

  • 自分の座標は transform.position で取得できる
  • 自分自身を消滅させるには Destroy(gameObject) を呼ぶ

ということですね。

落ちたら消す
床から落ちたら消します

こんな感じに書いて実行してみましょう。

[wpvp_player src=”http://yu-mug.jp/blog/wp-content/uploads/2015/01/2015-01-12-unity-01.mov” width=”448″ height=”360″ splash=”http://yu-mug.jp/blog/wp-content/uploads/2015/01/2015-01-12-unity-06.png”]

前に書いたとおり、雪だるまはキーボード入力で前後左右に動きます。それぞれが衝突したり、床との摩擦があったりするので予想外の動きをすることもあり、これだけでもなかなか面白いですね。

スペースキーを連打すると、場合によっては前に生成した雪だるまの内部に次の雪だるまが発生してしまいます。こうなると衝突による反発の計算がうまくいかないようで(当たり前)ちょっと面白いことが起こります。余力のある方はこの辺の修正方法など調べてみてはいかがでしょうか。


これまでの記事