Menu
CoddyTech

ウェイポイント

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

このコースでは、タワーディフェンスゲームを作成します。敵はウェーブごとに道に沿って基地へ進み、ビルドパッドに設置したタワーで敵を食い止めます。その後、タワーをアップグレードしたり売却したりできます。各レッスンで機能を1つずつ追加します。ゲームのスクリプトは12個すべて、最初からプロジェクトに含まれています。そのほとんどは短いスタブで、後のレッスンで内容を追加します。

敵はwaypointsに沿って道を進みます。waypointsは曲がり角に配置された空のGameObjectで、通過する順番に配列に格納されています。敵は向かうwaypointのインデックスを保持し、そこに向かって移動します。到着すると、次のwaypointへ進みます。Vector3.MoveTowards(current, target, maxStep)は、点をターゲットに向かって最大でもmaxStepだけ移動させ、ターゲットを通り越すことはありません。そのため、敵はwaypointに正確に到着し、==で到着したかどうかを判定できます。この巡回ドローンは、配置された地点の間を飛び、最後の地点の後は最初に戻ります。

public Transform[] posts;
public float speed = 3f;
private int current;

void Update()
{
    Vector3 goal = posts[current].position;
    transform.position = Vector3.MoveTowards(transform.position, goal, speed * Time.deltaTime);
    if (transform.position == goal)
    {
        current = (current + 1) % posts.Length;
    }
}

敵はループしません。最後のwaypointの先には進む場所がないためです。インデックスがLengthに達すると、waypointを指さなくなります。また、waypoints[waypoints.Length]を読み取るとIndexOutOfRangeExceptionが発生するため、インデックスを使う前にチェックします。waypointsは地面から0.6の高さ、つまり敵の中心の高さにあるため、waypointsに向かってまっすぐ進めば、敵の足は地面についたままです。

challenge icon

チャレンジ

簡単

Grunt は最初のウェイポイント WP0 に立っており、Enemy スクリプトには、スポーン地点の WP0 から基地の WP7 まで、8つのウェイポイントがすでに waypoints に格納されています。

  1. private int next を追加します。これは Grunt が向かうウェイポイントのインデックスです。Grunt は WP0 から開始するので、next は 1 から始まります。
  2. Update で Vector3.MoveTowards を使い、毎秒 speed 単位の速さで Grunt を waypoints[next] に向かって移動させます。
  3. そのウェイポイントに到着したら、次のウェイポイントに向かわせます。
  4. 最後のウェイポイントを過ぎたら停止させます。移動を続けず、エラーも発生させません。

Play を押して Grunt が道を歩くのを確認し、その後 Check を押します。

自分で試してみよう

using UnityEngine;

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

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

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

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