ウェイポイント
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と等しくなります。その位置で配列を読み取るとエラーになるため、使う前にインデックスを確認してください。
チャレンジ
簡単Gruntをウェイポイントから次のウェイポイントへと進ませ、経路を歩かせましょう。
Enemyにprivate int next = 1;を追加します(GruntはWP0から開始します)。Updateで、next >= waypoints.Lengthのときにreturnします。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プレイグラウンド