i-school - 2Dタワーディフェンス 設計を考える

2Dタワーディフェンスゲームの設計を考える


 Unityのバージョンは2020.3.xf1、あるいは2021.1.xf1 以降のバージョンにて製作を行う前提です。
 
 ゲームのジャンルは2Dゲーム、PC、あるいはスマホで遊ぶタワーディフェンスゲームです。

 基礎設計が出来上がれば、あとはモデルを自由に差し替えたり(キャラ以外のものに変更)、ステージ用の背景を変えたり、
新しいルールや機能を追加していくことでオリジナルアプリとして製作することも出来ますし、最終的にはポートフォリオとして頂くことも出来ます。

 少なくても以下の内容について、詳細な設計を考えていく必要があります。

・ゲーム性(ゲームシーンとCanvasでゲームを製作する、快適な操作、など)

・画面のデザイン(UIの配置、ゲームの世界観に沿ったUIのデザイン、など)

・必要なシステム・機能(画面のタップとタイルの位置の同期、敵の自動生成・自動経路生成・拠点への自動移動、選択したキャラの配置、など)

・1つプレファブからの異なるキャラを作成する方法(プレファブとデータベースの利用方法、など)

・演出(DOTweenによるアニメーション、画面のエフェクト、など)

・ゲームのサイクル(ゲームの流れ、追加要素を設計して実装する、など)

 それでは1つずつ設計を行っていきましょう。


・ゲーム性

1.ゲームシーンとCanvasでゲームを製作する


 2Dのトップビュー型のゲームですので、今回はゲームシーンとCanvasとを組み合わせて製作するようにします。
ゲームシーンの製作にはタイルマップの機能を利用しています。


2.快適な操作


 まず最初は PC のマウスにて遊ぶことを念頭に置き、シンプルな操作で快適に遊べる設計を考えます。
マウスクリックはそのままタップの処理として実装できます。

 1.画面のクリック(タップ)による操作

 上記のような挙動のシステムを実装する手順を考えます。


 

・画面のデザイン

1.UIの配置


 ベース部分では UI の配置はありませんので、こちらは発展編にて学習することになります。
仕様として検討している情報のうち、常にゲーム画面に固定して表示しておきたい情報と、そうではない情報とを精査して決定しましょう。
色々なゲームを参考にしながら、どの部分にどんな情報があれば便利なのか、邪魔にならない場所なのか、という視点で考えながら設計しましょう。


2.ゲームの世界観に沿ったUIのデザイン


 各画面のUIは常にゲーム中表示されていますので、そのデザインや、文字に使用するフォントの種類が見にくかったりするとユーザーは疲れてしまいます。
世界観に凝ったデザインもよいですが、見やすさ、読みやすさも一緒に考えて、バランスを保ちましょう。
 

必要なシステム・機能(画面のタップとタイルの位置の同期、敵の自動生成・自動経路生成・拠点への自動移動、選択したキャラの配置、など)

1.画面のタップとタイルの位置の同期


 画面をタップした際にタイルマップのどのタイルをタップしているかを判定する機能を実装します。
タイルの情報を取得することによりタイルの位置の情報を参照できるようになりますので、その後のキャラの配置の実装につながる機能になります。

 このようにゲームの機能は1つ1つはバラバラに見えていても、色々な部分でつながってきます。
逆説的に言えば、導入したい機能を実装するためには複数の様々な機能を実装しておかないと到達できないとも言えます。


2.敵の自動生成・自動経路生成・拠点への自動移動


 ステージごとに敵の出現ポイントと経路を登録しておける設計を行います。
その上で時間の経過によって敵が出現ポイントより自動的に生成され、防衛拠点までの経路が自動生成され、
敵の自動移動が開始される、という一連の処理を順番に実装していきます。

 この処理も複数の処理が積み重なって実装される処理になります。


3.選択したキャラの配置


 配置可能なキャラを選択することにより、タップしたタイルマップ上にキャラを生成して配置する機能を実装します。
これらの1〜3の機能をすべて備えることによりタワーディフェンスゲームのベース部分が出来上がります。

 その上で、カレンシーの自動加算処理や、配置時のキャラのコストの有無判定と支払い処理、ゲームの一時停止処理などを組み込んでいくことで、よりゲームらしくなっていきます。


1つプレファブからの異なるキャラを作成する方法(プレファブとデータベースの利用方法、など)


 キャラを生成する場合、用意したキャラの数だけプレファブを用意する方法もありますが、
ここではすべてのキャラを個別にプレファブ化・管理して作成するのではなく、元となるプレーンなキャラ用プレファブを1つ用意しておいて、
自動生成したあとに、各キャラしての役割・ふるまいを与えられて画面に配置されるような設計にします

 そのために必要なデータベースを作成する部分から学習を行います。

 プレーンなキャラを自動生成する
   ↓
 用意された情報を元に、キャラの画像、攻撃範囲、攻撃回数などを自動で設定し、「どんなキャラであるか」というふるまいを、その時に決める

 この設計は非常に重要な考え方になります。この手法を覚えることで同じ処理をステージや敵に対しても応用が可能なるためです。

 例えばゲーム内に登場するアイテムが100個あるとした場合、100個分のプレファブを1個ずつ100個作るのか、
あるいは1つのアイテム用のプレファブを利用して100個のアイテムとして自動的に振る舞うようにするのか、
どちらの方が管理しやすく、作りやすいか考えてみてください。

 ゲームのプログラミングはこういったゲーム内での運用・設計を含めて考えることが極めて大切です。


演出(エフェクト)

1.DOTweenを使用してアニメーション演出をする


 DOTween(ドットゥイーン)とは無料アセットの1つで、広く使われているTween(トゥイーン)系のアセットです。
Tweenとはゲームオブジェクトの途中経過情報を補間して表現することを言います。
例えば、Aというゲームオブジェクトが現在の地点から別の地点に移動するに際し、その移動する間の情報を補間して表現することが出来ます。
この補間表現機能を利用することにより、様々なアニメーション演出を実装出来ます。

 またDOTweenには、この機能が終了するタイミングを待って別の処理を呼ぶことや、途中で補間処理を中断したりといったことも出来ます。
Transformコンポーネントに対しての補間機能が多くありますが、それ以外にも使用方法は多岐にわたります。

 今回は、敵の経路に沿った移動処理や、ゲームスタートロゴを徐々に表示して、徐々に非表示にする処理などに DOTween の機能を利用しています。


2.画面のエフェクト


 画面をフラッシュさせたり、暗転させたりといったものだけではなく、キャラクターをアクションさせたり、画像を一瞬だけ大きくしたりなど
画面を通じて行える演出はたくさんあります。これらは場面に応じて適した内容のエフェクトを適宜いれていくことで、ゲームの臨場感や没入感が変わってきます。
 
 やりすぎず、少なすぎず、バランスを見ながら考えて実装しましょう。

 今回は発展編で学習予定です。


ゲームのサイクル

1.ゲームの流れ


 ゲームはジャンルごとに大まかなゲームの流れが決まっています。
例えばロールプレイングゲームであれば、フィールド画面を移動して、バトルを行って、というようにゲーム内での処理の流れが決まっています。
これをすべて書き出して、どの部分の処理と処理がつながっているかをしっかりと考えてからゲーム全体の流れを作成していくようにします。

 今回考える必要があるのは、タワーディフェンスゲームのゲーム全体の処理の流れになります。

 ゲームの設計・仕様、それを実装するためのロジックを考えることが非常に重要になります。
そのため、スクリプトを書くのは最後になります。設計などが完了していないうちに書き出してしまうと修正を余儀なくされるためです。
ゆえにプログラムにおいて設計の占める割合は非常に高いです。この部分をしっかりと学習して、どのような設計がよいのかを自分で考えていくようにしましょう。


2.追加要素を設計して実装する


 上記の内容をふまえて、ベースとなるシステムに追加するべき設計を行い、自分で考えた機能を実装してみましょう。
ベーシックなゲーム内容とゲームサイクルになっているため、ここには様々な要素を追加することが出来ます。

 例えば、ステージ選択画面の導入、アイテム要素の追加、キャラやプレイヤーによるスキル要素の追加など、
システム面の機能だけでもかなりの追加要素が考えられます。

 それらの設計を行い、自分で考えた機能を実装してみましょう。



3.ステージの自動生成機能、敵の自動生成機能

 
 ステージは事前に作成してプレファブ化し、それをデータベースとして登録を行っておいて、そのデータをゲーム内に反映させる設計にします。

 ステージの情報として、どのような敵が生成されるのか、どの地点に生成されるのか、といった情報を登録しておきます。
このようにすることで、同じプログラムであっても、生成される敵の位置を、各ステージのデータに応じて自動的に切り替えることが出来ます。

<プログラムは同じでもデータベースで内容を自動的に分岐させる>
 ・ステージを自動的に生成する
    ↓
 ・時間の経過に合わせて敵を自動生成する
    ↓
 ・敵のデータをデータベースから取得して、そのデータを使って敵の情報を設定し、自動移動を開始する
    ↓
 ・ステージ内の生成された敵がすべていなくなればゲームクリア

 このサイクルのみでゲームのプログラムは動いています。例えるなら、ステージのデータがゲームソフトであり、それを読み込んで実行するゲーム機器がプログラムです。
ステージのデータが毎回異なるため、ゲーム画面では違うステージが表示されて、そのステージに応じた敵が指定された位置から生成されるようになっています。
こういったデータベースの機能や、プログラムの自動サイクル化による設計方法、それをゲーム内に活用していく方法を学習します。

 多くのゲームはこういったパターンで、自動化されたサイクルをロジックとして組み込んで動いているという、イメージをつかんでください。
プログラムはそれを可能にするための手段です。それを作成するのがプログラマーのエンジニアとしての仕事・役割になります。



 設計の項目については、以上になります。詳細については実装する際の手順内にて説明を補記していきます。
また、これら以外にも用意するべきものがあるのであれば、それらも考えておきましょう。


 以上でこの手順は終了です。

 => 次は 実装手順を考える です。