Menu
CoddyTech

一波敌人

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

现在,Grunt 和 Runner 都是预制体,另外还有 Tank 和 Boss,Spawner 则位于 WP0 上。一波敌人由几个数字描述:敌人类型、数量以及敌人之间的间隔。因此,Wave 是一个 [System.Serializable] 类,Spawner 会保存一个 List<Wave>,由 Inspector 填入游戏中的 8 波敌人。如果没有 [System.Serializable],Unity 就无法填充这个列表,列表会一直为空。

要分批生成敌人,可以使用协程:yield return new WaitForSeconds(...) 会等待一段时间,但不会停止游戏。预制体无法引用场景中的路径点,因此 Spawner 会在 Instantiate 后,将路径点传给每个新生成的敌人:

Enemy enemy = Instantiate(wave.enemy, waypoints[0].position, Quaternion.identity);
enemy.waypoints = waypoints;
yield return new WaitForSeconds(wave.spacing);
challenge icon

挑战

简单

让第一波 Grunt 沿着路径前进。

  1. 在 Wave.cs 中,将 [System.Serializable] 添加到 Wave 上,并添加 public Enemy enemy;、public int count; 和 public float spacing;。
  2. 在 WaveSpawner 中,添加 [SerializeField] private List<Wave> waves; 和 [SerializeField] private Transform[] waypoints;。
  3. 从 Start 中运行一个协程,按上述方式生成 waves[0].count 个敌人。

按下 Play:6 个 Grunt 会依次出发,间隔 1.2 秒。然后点击“检查”。

亲手试试

using UnityEngine;

// 稍后实现:让敌人分批沿路径前进。
public class WaveSpawner : MonoBehaviour
{
}

Unity 塔防游戏中的所有课

自己练习: Unity 在线编辑器