一波敌人
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);挑战
简单让第一波 Grunt 沿着路径前进。
- 在
Wave.cs中,将[System.Serializable]添加到Wave上,并添加public Enemy enemy;、public int count;和public float spacing;。 - 在
WaveSpawner中,添加[SerializeField] private List<Wave> waves;和[SerializeField] private Transform[] waypoints;。 - 从
Start中运行一个协程,按上述方式生成waves[0].count个敌人。
按下 Play:6 个 Grunt 会依次出发,间隔 1.2 秒。然后点击“检查”。
亲手试试
using UnityEngine;
// 稍后实现:让敌人分批沿路径前进。
public class WaveSpawner : MonoBehaviour
{
}
Unity 塔防游戏中的所有课
自己练习: Unity 在线编辑器