を掛け合わせ、それを現在の座標に加えることに Unity でのゲーム製作 海本 健太 よって移動後の座標になる。 中野 中央 3.研究内容 一からシューティングゲームを作るのは困難 だと思ったので Unity の公式サイトを見て、C# 1.まえがき 僕たちは、昨年の課題研究で、eclipse を用いて の文法や、Unity から提供されている関数の使い Android 上で動作するアプリケーションの制作を 方を参考にした。 した。そして今回はよりゲーム性のあるものを作 (1) 敵の挙動について るために、Unity というゲームエンジンを用いて、 敵は数種類用意し(図2) 、それぞれ挙動が違 PC 上でも Android 上でも動作するシューティン うようにした。 グゲームを制作した。 敵のドット絵は、http://takabosoft.com/edge の EDGE というフリーソフトを使用して作成し 2.原 理 た。 (1) Unity について Unity とはゲーム製作に特化した統合開発環境 で、様々なプラットフォームに対応したゲームを 開発するために用いられ、多くの開発者が利用し ている。身近なものでは、Windows、iOS、Android、 Linux などに対応している。 (2) スクリプトについて プレイヤーや敵のキャラクター、背景などにス クリプトを実装し、制御している。今回使用した プログラミング言語は、C#である。ここで、プレ イヤーに実装したスクリプトの一部を示す(図 図2 敵キャラクター 1)。 移動の方法はプレイヤーのスクリプトを参考 にした。弾を撃つスクリプトを共用し、それぞれ の移動方向や速度、弾の撃つ間隔・速度を変える ことによって、敵の挙動に変化をつけた。例えば (図2)の左端の敵は、弾を撃つスクリプトに方 向を変える処理を加え、多方向に弾を撃つように した。また上からやって来るだけでなく画面の下、 あるいは左右から移動してくるような処理も記 述し、敵に個性を持たせた。そして、右端の敵は 図1 プレイヤーのスクリプトの一部 腕や尾などの部位に個別にスクリプトを実装す ることによって、部位によって様々な動きをする、 これは、プレイヤーの移動について記述したも ボスらしい挙動にすることができた。 のである。Input.GetAxisRaw 関数で水平垂直方 こうして作成した敵の配置をグループ化し、一 向の入力を取得し、それらに基づいて、プレイヤ つのオブジェクトにまとめた。そしてそれらを管 ーの移動方向を求める。そのベクトルに移動速度 理するスクリプト(図3)を作成し、オブジェク 1 トを順次発生させるようにした。 時間経過とすることで、高速でアニメーションを 切り替え、点滅させている。そして、下画面では Sprite Renderer.Color を用いて敵が点滅する際 の色、つまり状態が Damage の時の色を設定して いる。Color.r、Color.g、Color.b をそれぞれ 0~1.0 の値で割り振ることで設定できる。 (3) 当たり判定について Unity で当たり判定を追加するには三つの工程 を踏まなければならない。 ①当たり判定を行う範囲の設定 Unity では当たり判定のために Polygon Co- 図3 敵管理スクリプトの一部 llider 2D が提供されている。これを使用すると、 waves という配列の中に敵のグループを格納 開発者が自由にポリゴン状に範囲を設定でき し、前のグループが消滅したら次のグループが呼 る。他にも Circle Collider 2D や Box Collider び出されるようになっている。これを繰り返すこ 2D などがある。これらを組み合わせることで とによって、次々に敵が現れるようになる。 複雑な形状のオブジェクトでも当たり判定を (2) アニメーションについて 設定できる(図5) 。 敵にダメージを与えたときにそのままでは弾 が当たったか分かりづらいので、弾が当たったと きに敵を点滅させるアニメーション(図4)を加 えた。 図5 複雑な当たり判定の例 図4 アニメーション製作画面 ②レイヤーによる当たり判定の制御 当たり判定とは、必ずしもすべてのオブジェ まず、上画面では、敵の通常の状態(Dummy) クト同士で行われるものではない。例えば、今 と、被弾したときの状態(Damage)が表示されて 回のようなシューティングゲームでは以下の いる。この二つの状態を遷移させる条件を定める ような制限が考えられる。 ことによってそれらに対応したアニメーション ・ プレイヤーとプレイヤーの弾は当たらない を再生させている。この場合だと Damage への遷 ・ 敵と敵の弾は当たらない 移条件を被弾、Dummy への遷移条件を極僅かな ・ プレイヤーの弾と敵の弾は当たらない 2 ・ プレイヤーの弾同士は当たらない Animation といったコンポーネントがある。また、 ・ 敵の弾同士は当たらない 開発者が作ったスクリプトもコンポーネントと ・ 敵同士は当たらない して扱うことができ、複数のスクリプトをオブジ これらの制限を行う上で最も簡単なのがレ ェクトに追加することで複雑な処理を制御する ことができる。また、public+変数宣言をスクリプ イヤーで当たり判定を制御することである。 レイヤー(Player や Enemy など)を作成し、 トに記述することによって視覚的に数値の変更 それをオブジェクトごとに割り当て、プロジェ が可能になる。 クト設定でどのレイヤーとレイヤーに当たり (5) 背景について 判定を適用するかを設定する(図6) 。 縦スクロールのシューティングゲームなので、 上から下へスクロールする背景を製作した。その 際に、背景に使用する画像を 2 枚作成し、それぞ れのスクロールする速さを変えることで奥行き を表現した。画像のスクロールとループは Mathf.Repeat 関数を使って行う。この関数は一 定範囲で繰り返す数値を取得する。今回は時間に よって画像の Y 座標を変化させ、画像の端が来た ら再び画像を表示し、ループさせるために次のよ うに記述した。 float y = Mathf.Repeat (Time.time * speed,1); ここで、y の値が変化していき、 Vector2 offset = new Vector2 (0, y); 図6 レイヤーの設定 で画像の Y 座標がずれていくオフセットを作成 ③スクリプトへの衝突処理の入力 し、 renderer.sharedMaterial.SetTextureOffset- 衝突処理を行いたいオブジェクトのスクリ プト内に、void OnTriggerEnter2D (Collider- ("_MainTex", offset); 2D c)を入力する。この関数は、オブジェクトが によって画像に設定し適用する。 他のオブジェクトの当たり判定の範囲に入っ た時に呼び出される関数である。この関数内に オブジェクトが衝突した時に行いたい処理を 追加する。例えば敵キャラクターにプレイヤー の弾が当たった場合、プレイヤーの弾を削除し て、自身の体力を減らし、そして体力が0以下 の時にはスコアにポイントを追加し爆発のア ニメーションを再生させ、自身を削除する。 (4) コンポーネントについて 図7 背景 コンポーネントとは、オブジェクトの機能的部 品である。開発者はオブジェクトにコンポーネン (図7)に示したものが作成した背景である。 トを追加して機能を増やしていくことができる。 滑走路と雲で画像を分けてある。 コンポーネントの種類は様々であり、例えば前述 (5) ビルドについて し た Polygon Collider 2D や Animator 、 Unity は複数のプラットフォームに対応してビ 3 ルドする事が出来るが、今回は PC と Android 端 末用にビルドした。 図9 完成図 6.参考文献 (1) Unity - Unity Manual http://docs-jp.unity3d.com/Documentation/Scri ptReference/ (3) UNITY - Tutorial – 2D Shooting Game http://japan.unity3d.com/developer/document/t utorial/2d-shooting-game/ 図8 ビルド設定画面 (4) Unity メモ – Android でゲームオブジェク PC 向けのビルドは Unity 単体で可能だが、 トをタッチする処理 Android 向けにビルドする場合は JDK(Java SE http://ookumaneko.wordpress.com/2012/05/29/ Development Kit)と Android SDK が必要であり、 unity/ システム環境変数 path と JAVA_HOME に JDK、 (5) [Unity] 他オブジェクトと連携-Find とか Unity には SDK のパスを通しておかなければな GetComponent とか SendMessage とか らない。 http://myoujing.wpblog.jp/2014/06/760/ 4.まとめ 限られた時間の中で上手く形に出来るか少し 不安だったが、試行錯誤を繰り返し、アイデアを 出し合い、自分たちの目標とするものに近づけて いった。Unity では、反映させた結果をすぐに確 認できるので手直しがしやすかった。 5.あとがき Unity、C#という自分たちが扱ったことのない 開発環境の中での作業だったため、はじめは上手 く動作しなくてもどこをどのように直せばよい か分からなかった。だが、各サイトを参考にして 少しずつ前進していった。なんとか形にすること は出来たが、改善点は多数見られたのでそれを今 後の課題としたい。 4
© Copyright 2024 ExpyDoc