Menu
CoddyTech

敵のデータ

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 で、その値を自身のフィールドにコピーします。アセット自体は決して変更しないでください。その種類の敵すべてに変更が反映されてしまいます。

challenge icon

チャレンジ

簡単

各敵に、その種類のステータスをアセットから設定します。

  1. Enemyで、speedをpublic EnemyData data;に置き換え、data.speedの速度で移動するようにします。
  2. 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プレイグラウンド