Menu
CoddyTech

航点

Coddy Unity 塔防游戏 课程的第 1 课,共 25 课。

在这门课程中,你将制作一款塔防游戏:敌人分波沿着路径向你的基地前进,你在路径旁建造的炮塔会阻止它们。每节课都会添加一个功能。按“开始”来试玩,按“检查”来评分。项目从一开始就包含全部 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 时返回。
  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()
    {
        // 在这里沿路径移动:按顺序从一个路径点走到下一个路径点。
    }
}

Unity 塔防游戏中的所有课

自己练习: Unity 在线编辑器