敵のデータ
Coddyの「Unityゲーム:タワーディフェンス」コースのレッスン 2/25。
Runner が Grunt に加わります。速度が速く、体力は少なめです。すべての Runner は同じ数値を共有するため、それらは個々の敵ではなく種類に属します。それらの数値は、ScriptableObject アセットである EnemyData に格納されています。プロジェクトには GruntData(速度 2、体力 9)と RunnerData(速度 3.5、体力 5)があり、Inspector で各敵の data フィールドにそれぞれのデータを割り当てます。
各敵は必要になるたびに、このフィールドを通じて種類ごとの数値を読み取ります。
void Start()
{
Debug.Log(name + " pays " + data.reward);
}体力は異なります。攻撃を受けた Grunt の体力は、その後ろにいる Grunt より少なくなっています。そのため、アセットには maxHealth を保持し、各敵はオブジェクトが作成されるとすぐに実行される Awake で、その値を自身のフィールドにコピーします。アセット自体は決して変更しないでください。その種類の敵すべてに変更が反映されてしまいます。
チャレンジ
簡単各敵に、その種類のステータスをアセットから設定します。
Enemyで、speedをpublic EnemyData data;に置き換え、data.speedの速度で移動するようにします。private int health;を追加し、Awakeで値をdata.maxHealthに設定します。
「プレイ」を押すと、RunnerがGruntを追い越します。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float speed = 2f;
public Transform[] waypoints;
private int next = 1;
void Update()
{
if (next >= waypoints.Length)
{
return;
}
Vector3 target = waypoints[next].position;
transform.position = Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime);
if (transform.position == target)
{
next++;
}
}
}
Unityゲーム:タワーディフェンスのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド