Menu
CoddyTech

ウェイポイント

Coddyの「Unityゲーム:タワーディフェンス」コースのレッスン 1/25。

このコースでは、タワーディフェンスゲームを作ります。敵はウェーブごとに道を進んで拠点に向かい、道のそばに建てたタワーが敵を食い止めます。各レッスンで機能を1つ追加します。「プレイ」を押して試し、「確認」を押して採点します。12個のスクリプトはすべて最初からプロジェクトに含まれています。ほとんどは後のレッスンで内容を追加する短いスタブで、レッスン2用のEnemyDataも用意されています。

道には8つのウェイポイントがあり、スポーン地点のWP0から拠点のWP7まで、Gruntのwaypoints配列に格納されています。Gruntは向かう先のウェイポイントのインデックスを保持し、その地点に向かって移動します。Vector3.MoveTowardsは目標地点を通り越さないため、Gruntはウェイポイントに正確に到着し、==で到着したかどうかを判定できます。

Vector3 target = waypoints[3].position;
transform.position = Vector3.MoveTowards(transform.position, target, 5f * Time.deltaTime);
if (transform.position == target)
{
    // 到着:次の地点へ向かう
}

最後のウェイポイントを過ぎると、インデックスはwaypoints.Lengthと等しくなります。その位置で配列を読み取るとエラーになるため、使う前にインデックスを確認してください。

challenge icon

チャレンジ

簡単

Gruntをウェイポイントから次のウェイポイントへと進ませ、経路を歩かせましょう。

  1. Enemyにprivate int next = 1;を追加します(GruntはWP0から開始します)。
  2. Updateで、next >= waypoints.Lengthのときにreturnします。
  3. speed * Time.deltaTimeの速度でVector3.MoveTowardsを使ってwaypoints[next].positionに向かって移動させます。そこに着いたらnext++を実行します。

「プレイ」を押します。Gruntがすべての角を通って歩き、拠点で停止します。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

public class Enemy : MonoBehaviour
{
    public float speed = 2f;
    public Transform[] waypoints;

    void Update()
    {
        // ここで経路に沿って移動する:waypointから次のwaypointへ、順番に。
    }
}

Unityゲーム:タワーディフェンスのすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド