Unity チュートリアルのタワーディフェンステンプレートを触ってみる(32)
Unity チュートリアルのタワーディフェンステンプレートを触ってみる(31)では「タワーディフェンステンプレートのステージの設定編」を行い、ナビゲーションノードの作成まで行った。今回も引き続き「タワーディフェンステンプレートのステージの設定編」のタワー配置エリアから行っていく。
今回は前回の続きからの記事となるため、7.章からの開始となる。前回の記事までについてはこちらを参照してほしい。
7.タワーディフェンステンプレートのステージの設定編 – タワー配置エリア
『スターターキットのタワーには、プレイヤーがステージ内にタワーを配置できるようにするために IPlacementAreas が必要です。 空のゲームオブジェクトに IPlacementArea を実装した後、タワーの配置場所を定義することができます。
スターターキットには、IPlacementArea の 2 つの実装が含まれています。』とのことなので、それぞれを作成していきたいと思う。
SingleTowerPlacementArea
『SingleTowerPlacementArea は、タワーを 1 つだけ配置できる IPlacementArea です。』とのことなので、指示に従って SingleTowerPlacementArea の作成を行っていきたいと思う。手順については以下の通りとなっている。
-
新しいゲームオブジェクトを作成し、それを TowerPlacementArea と名付けます。
-
Sphere Collider を TowerPlacementArea オブジェクトに加えます。
-
SingleTowerPlacementArea コンポーネントを TowerPlacementArea オブジェクトに加えます。
-
Prefabs/UI の SinglePlacementTile プレハブを Placement Tile Prefab フィールドにドラッグアンドドロップします。
-
TowerPlacementArea のレイヤーを PlacementLayer に設定します。
上記の指示通り空のゲームオブジェクトを TowerPlacementArea という名称で作成し、Sphere Collider と SingleTowerPlacementArea を追加して、SinglePlacementTile Prefab を Placement Tile Prefab に対してドラッグアンドドロップすると以下のようになる。
TowerPlacementGrid
『TowerPlacementGrid は、プレイヤーが複数のタワーを配置できるグリッド状のエリアです。』v
-
空のゲームオブジェクトを作成し、PlacementGrid と名付けます。
-
TowerPlacementGrid コンポーネントを加えます。
-
グリッドに任意の Dimensions を設定します。
-
Prefabs/UI の PlacementTile プレハブを Placement Tile Prefab フィールドにドラッグアンドドロップします。
上記の指示通り空のゲームオブジェクトを PlacementGrid という名称で作成し、TowerPlacementGrid を追加した。その後、任意のグリッド(ここでは、x : 3, y : 10 とした。)を設定し、PlacementTile を設定すると以下のようになった。
8.タワーディフェンステンプレートのステージの設定編 – 本拠地を配置
『敵は、最終ノードに到達したときにプレイヤーの耐久力を奪いません。この問題を解決するには、最後のナビゲーションノードをいくらか変更する必要があります。』とのことなので、指示に従って本拠地の作成を行っていきたいと思う。手順については以下の通りとなっている。
-
PlayerHomeBase コンポーネントを最後のノードゲームオブジェクトに加えます。
-
PlayerHomeBase の Max Health と Starting Health を設定します。
-
Player (SimpleAlignment) スクリプタブルオブジェクトを Alignment フィールドにドラッグアンドドロップします。
上記の指示通り前回作成したノードの最後に PlayerHomeBase コンポーネントを追加した。その後、Max Health と Starting Health に任意の値を設定し、Player (SimpleAlignment) スクリプタブルオブジェクトを設定すると以下のようになった。
9.タワーディフェンステンプレートのステージの設定編 – Tower Library を加える
『タワーを配置するエリアを作成したので、そのステージでどのタワーが使用可能なのかを設定する必要があります。』とのことなので、指示に従っ Tower Library の作成を行っていきたいと思う。手順については以下の通りとなっている。
-
Project ウィンドウから Create > Tower Defense > Tower Library を選択します。
-
このステージでプレイヤーが利用できるタワープレハブをドラッグします。
上記の指示通り Create > Tower Defense > Tower Library から Tower Library の作成を行う。
その後、任意のタワーの Prefab を設定に追加する。ここでは既存の LayserTower を設定している。
10.タワーディフェンステンプレートのステージの設定編 – ウェーブの設定1
『敵を発生させるために、ウェーブを設定する必要があります。』とのことなので、指示に従ってウェーブの作成を行っていきたいと思う。手順については以下の通りとなっている。
-
空のゲームオブジェクトを作成し、Wave Manager と名付けます。
-
Wave Manager オブジェクトに WaveManager コンポーネントを加えます。
-
Size フィールドに発生させるウェーブの数を入力します。
上記の指示通り空のゲームオブジェクトを Wave Manager という名称で作成し、Wave Manager コンポーネントを追加した。その後、Size の数を1として設定を行うと以下のようになった。この後、作成する Wave1 を Wave として追加した。
『ウェーブを作成する代わりに以下を行うこともできます。』とのことなので、指示に従ってウェーブの作成を行っていきたいと思う。手順については以下の通りとなっている。
-
空のゲームオブジェクトを作成し、Wave1 と名付けます (必要に応じて数字を変えます)。
-
Wave1 に Wave コンポーネントを加えます。
-
Spawn Instructions 下の Size フィールドに、ウェーブで発生させるエージェント数を入力します。
-
各エージェントに対し、
-
敵のタイプの AgentConfiguration スクリプタブルオブジェクトを Agent Configuration フィールドにドラッグアンドドロップします。
-
Delay To Spawn フィールドに、エージェントが発生してから次のエージェントが発生するまでに何秒の間隔をあけるかを設定します。
-
エージェントが発生するノードを Starting Node フィールドにドラッグアンドドロップします。
-
上記の指示通り空のゲームオブジェクトを Wave1 という名称で作成し、Wave コンポーネントを追加した。その後、Spawn Instructions の数を1として設定を行うと以下のようになった。
11.タワーディフェンステンプレートのステージの設定編 – Game Manager を加える
『プレイヤーがすべての敵を倒すか、本拠地の耐久力が底をついたときにステージが終了するためには、ゲームオブジェクトに Game Manager コンポーネントを加える必要があります。』とのことなので、指示に従って Game Manager の作成を行っていきたいと思う。手順については以下の通りとなっている。
-
Prefabs/Manager にあるスターターキットのデフォルトの GameManager プレハブを Hierarchy ウィンドウにドラッグアンドドロップします。
-
LevelList スクリプタブルオブジェクトを Level List フィールドにドラッグアンドドロップします。
上記の指示通り Prefab から Game Manager をドラッグアンドドロップし、Level List を追加した。
12.タワーディフェンステンプレートのステージの設定編 – Level Manager を加える
『LevelManager はゲームの状態を管理し、ステージの他の重要な機能 (例えば、最初にプレイヤーに与えられる通貨の量など) を設定することができます。以下の手順でそれを加えます。』とのことなので、指示に従って Level Manager の作成を行っていきたいと思う。手順については以下の通りとなっている。
-
LevelManager コンポーネントを以前に作成した Wave Manager ゲームオブジェクトに追加します。
-
Starting Currency フィールドを設定します。
-
TowerLibrary スクリプタブルオブジェクトを Tower Library フィールドにドラッグアンドドロップします。
上記の指示通り、11.で追加した Game Manager に対してを LevelManager コンポーネントを追加し、Starting Currency フィールドを設定と TowerLibrary スクリプタブルオブジェクトを Tower Library の追加を行うと以下の通りとなる。
13.タワーディフェンステンプレートのステージの設定編 – Pool Manager
『敵、砲弾の受動的な効果のインスタンスを絶え間なく作成および破壊することは、負担のかかる操作です。 これを行う代わりに、スターターキットのプールマネージャーを利用できます。 プールマネージャーは、オブジェクトの複製を作成、格納し、再利用できるようにするクラスです。』
-
砲弾、パーティクルシステム、エージェントに Poolable コンポーネントを加えます。
-
空のゲームオブジェクトを作成し、Pool Manager と名付けます。
-
PoolManager コンポーネントを Pool Manager ゲームオブジェクトに加えます。
-
ステージに砲弾、パーティクルシステム、敵を出現させる場合は、それらのプレハブを Poolables フィールドにドラッグアンドドラッグします。
-
平面の Transform の Scale は必ず (1, 1, 1) に設定します。
上記の指示に従い、自作のエージェントに足して Poolable を追加すると以下の通りとなる。
その後、空のゲームオブジェクトを Pool Manager という名前で作成し、ステージに登場し、複数生成されるオブジェクトをドラッグアンドドロップして追加すると以下のようになる。