タワー

確認済のバージョン: 2017.2

-

難易度: 中級

プロジェクトの設定

まず、Unity エディターをインストールして開きます。タワーディフェンステンプレートは、Asset Store ウィンドウからダウンロードできます。

このチュートリアルでは、空のシーンを使用します。 スターターキットには、自分の作品と見比べるため、完成したステージがいくつか用意されています。

タワー

はじめに

タワーディフェンスゲームのもっとも重要な要素はタワーです。タワーディフェンステンプレートには、タワーの作成に使用する 2 つの主要な要素があります。1 つめはタワーコンポーネントで、タワーの基本的な機能を定義します。2 つめはタワーレベルコンポーネントで、アップグレードしたときのタワーの挙動を定義します。

タワーの作成

まず、最初から新しいタワーを作成してみましょう。

タワーゲームオブジェクト自体を作成する前に、さまざまなレベルでどのように挙動するかについてのデータを格納するデータオブジェクトを作成する必要があります。このオブジェクトは TowerLevelData スクリプタブルオブジェクトと呼ばれます。

まず、 タワーのレベル 1 のデータを格納する TowerLevelData スクリプタブルオブジェクトの作成から始めます。

  • Project ウィンドウの右上にある Create メニューをクリックし、Create > Tower Defense > Tower Configuration を選択します。

  • スクリプタブルオブジェクトに、そのタイプとレベル数に関連した名前を付けます (例えば Laser1)。

  • この ScriptableObject を Data/Towers に配置します。

  • タワーの名前、耐久力、コストに関する値を設定します。

この手順を繰り返して、次のレベルのタワーのデータオブジェクトを作成します。

  • Project ウィンドウの右上にある Create メニューをクリックし、Create > Tower Defense > Tower Configuration を選択します。

  • スクリプタブルオブジェクトに、そのタイプとレベル数に関連する名前を付けます (例えば Laser2)。

  • この ScriptableObject を Data/Towers に配置します。

  • タワーの名前、説明 (このレベルにアップグレードするときに表示)、耐久力、コストに関する値を設定します。

次に、これらのレベルそれぞれの TowerLevel プレハブを作成します。TowerLevel プレハブには、タワーのそのレベルに関連するスクリプタブルオブジェクトへの参照を持つ TowerLevel コンポーネントが含まれます。プレハブにはまた、タワーが敵を目標にし攻撃する方法を決定する子オブジェクトも含まれます。

まず、 タワーのレベル 1 のデータを格納する TowerLevel プレハブを作成しましょう。

  • Hierarchy ウィンドウの Create メニューから Create > Create Empty を選択します。

  • 新しいゲームオブジェクトにタワータイプとレベルを示す名前を付けます (例えば LaserTower_1)。

  • TowerLevel コンポーネントをゲームオブジェクトに追加します。

  • このタワーのレベルに対応する ScriptableObject を Level Data フィールドにドラッグします。

  • タワーの外観を決めるゲームオブジェクトを子として追加します。

  • タワーを格納する Prefabs/Towers フォルダーを作成します。

  • Hierarchy ビューにあるタワーのゲームオブジェクトを、新しく作ったフォルダにドラッグし、プレハブを作成します。

この手順を繰り返して、次のレベルのタワーのデータオブジェクトを作成します。

  • Hierarchy ウィンドウの Create メニューから Create > Create Empty を選択します。

  • 新しいゲームオブジェクトにタワータイプとレベルを示す名前を付けます (例えば LaserTower_2)。

  • TowerLevel コンポーネントをゲームオブジェクトに追加します。

  • このタワーのレベルに対応する ScriptableObject を Level Data フィールドにドラッグします。

  • タワーの外観を決めるゲームオブジェクトを子として追加します。

  • タワーを格納する Prefabs/Towers フォルダーを作成します。

  • Hierarchy ビューにあるタワーのゲームオブジェクトを、新しく作ったフォルダにドラッグし、プレハブを作成します。

必要な TowerLevelData スクリプタブルオブジェクトと TowerLevel プレハブができました。これで、タワーのゲームオブジェクト自体を作成できます。

  • 新しいシーンを開きます。

  • 空のゲームオブジェクトを作成します。

  • ゲームオブジェクトの名前を NewTower にします。

  • NewTower ゲームオブジェクトに Tower コンポーネントを加えます。

Tower コンポーネントを動作させるには他のコンポーネントがいくつか必要です。そこで次に、それらを加える作業を行います。

  • 適切な Collider コンポーネントを加えて、タワーのモデルを NewTower ゲームオブジェクトに加えます。

Collider コンポーネントは、タワーが敵の砲弾に当たったかどうかを判断するために必要です。また、Collider は、タワーが選択された後にプレイヤーがタワーをクリックできる範囲を設定します。

  • DamageCollider コンポーネントを NewTower ゲームオブジェクトに加えます。

DamageCollider コンポーネントは、Damager を持つオブジェクトとの衝突を処理します (アクションゲームフレームワーク を参照)。

これから、NewTower ゲームオブジェクトの Tower コンポーネントの設定を行います。

  • Player (SimpleAlignment) スクリプタブルオブジェクトを Alignment フィールドにドラッグします。

  • 必要に応じて Target Transform を設定します。

  • Levels の下の Size フィールドに TowerLevel オブジェクトの必要数を入力します。

  • タワーの TowerLevel プレハブを Element フィールドにドラッグします。

  • Tower Name フィールドにタワーの名前を入力します。

  • Dimensions の X と Y の値を設定して、タワーを配置グリッドに配置するのに必要なスペースの大きさを決定します。

  • タワーゲームオブジェクトの子として耐久力バーのオブジェクトを加えます。

タワーのプレハブには、タワーの特定のレベルのすべてのビジュアル情報が含まれます。タワープレハブには、タワーの Affector と Launcher も含まれます (後述)。

Tower コンポーネントを理解する

この Tower コンポーネントを使用すると、タワーのすべてのレベルに共通の値を設定し、個々のタワーレベルのデータを含む TowerLevel プレハブへの参照を設定することができます。

Configuration

Max Health

タワーの最大耐久力。

TowerLevel プレハブに Tower のレベル 1 が割り当てられる場合、ここで設定された値はその TowerLevel コンポーネントの MaxHealth 値で上書きされます。

Starting Health

開始時点のタワーの耐久力。

TowerLevel スクリプタブルオブジェクトに Tower のレベル 1 が割り当てられる場合、ここで設定された値はその TowerLevel スクリプタブルオブジェクトの StartingHealth 値で上書きされます。

Alignment

Alignment (属性) は、標的になりうるもののうち、どれをタワーが攻撃するかを決定します。これを SimpleAlignment スクリプタブルオブジェクトへの参照で設定します。

スターターキットには、2 つの SimpleAlignment スクリプタブルオブジェクトが用意されています。

  • Player - タワーは敵ユニットを砲撃します。

  • Enemy - 敵は、Player 属性を持つものすべてを砲撃します。

SimpleAlignment スクリプタブルオブジェクトは、ゲームのチームを作るための方法です。1 つの SimpleAlignment は、敵とみなして攻撃したりダメージを与えたりする他の SimpleAlignment のリストを使用して設定されます。タワーディフェンステンプレートには上記の 2 つの属性が含まれていますが、自分でカスタマイズした SimpleAlignment を作成することも可能です。

より多くの属性を作成するには、Project ウィンドウから Create > Starter Kit > Simple Alignment を選択します。その他に、複雑なロジックが必要な場合は、IAlignmentProvider スクリプトを自分で実装することもできます。

Target Transform

通常、タワーやエージェントが互いを狙うとき、Transform の原点をねらいます。TargetTransform を使うと、別の点を狙うことができます。

Levels

ここでは、タワーのいくつかのレベルを設定し、さらに、TowerLevel プレハブ (詳細は後述) を Tower コンポーネントと関連付けします。

Tower Name

このフィールドに、プレイヤーに表示するタワーの名前を入力します。

Tower Description

このフィールドに、プレイヤーに表示するタワーの簡単な説明を入力します。プレイヤーにタワーの目的と能力を説明するために使用されます。

Dimensions

  • 配置グリッドでタワーが必要とするスペースの大きさを設定します。

Enemy Layer Mask

これにより、タワーが標的にできるレイヤーを定義します。

TowerLevelData スクリプタブルオブジェクトを理解する

Description

ユーザーがこのタイプを選択するとき UI に表示される短い説明文。

Upgrade Description

アップグレード時にタワーがどのように変化するかをユーザーに知らせる短い説明文。 このタワーレベルにアップグレードするときにテキストが表示されるので、レベル 1 では Tower Description は必要ないことに注意してください。

Cost

Cost は、プレーヤーがこのレベルのタワーを購入したりアップグレードしたりするためにどれだけ費用が必要かを示します。

Sell

Sell は、プレイヤーがゲーム中にタワーがいくらで売れるかを示します。

Sell は通常 Cost よりも低い値ですが、必ずしもそうである必要はありません。このプロジェクトの例では、レベルの高いタワーの売却値では、プレーヤーがタワーの全レベルで費やした累積費用が考慮されます。

Max Health

現レベルにアップグレードされたときのタワーの最大耐久力。

Starting Health

現レベルにアップグレードされた開始時点の、タワーの耐久力。

Icon

Icon フィールドは、UI でタワーを示すスプライトを割り当てるために使われます。Icon や、それが、各ステージの使用可能なタワーのリストとどのように結びついているかは、 ステージの設定 セクションを参照してください。

TowerLevel コンポーネントを理解する

Tower Ghost プレハブ

プレイヤーがタワーを指すときに、プレビューが表示されます。

Build Effect プレハブ

タワーが作られたり、アップグレードされたりするときは必ず、ここで割り当てられたパーティクルエフェクトのプレハブが、それに付随する効果音と共にインスタンス化されます。

LevelData

このレベルのデータを含む TowerLevelData スクリプタブルオブジェクト。

関連するチュートリアル