航点
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。此时读取数组会引发错误,所以使用索引前要先检查它。
挑战
简单让 Grunt 沿着路径从一个航点走到下一个航点。
- 在
Enemy中,添加private int next = 1;(Grunt 从 WP0 开始)。 - 在
Update中,当next >= waypoints.Length时返回。 - 以
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 在线编辑器