每一波
Coddy Unity 塔防游戏 课程的第 6 课,共 25 课。
一波敌人还不能构成一场游戏。协程会按顺序遍历每一波,在开始每一波之前暂停,让玩家做好准备,并告诉 Console 哪一波即将开始。暂停时间由循环顶部的另一个 WaitForSeconds 控制:
for (int i = 0; i < waves.Count; i++)
{
yield return new WaitForSeconds(timeBetweenWaves);
// 记录这一波,然后像之前一样生成 waves[i]
}列表中的波次从 0 开始计数,而玩家看到的波次从 1 开始,因此 Console 会显示 "Wave " + (i + 1)。
挑战
中等发送每一波敌人,每波开始前都暂停一段时间。
- 在
WaveSpawner中,添加[SerializeField] private float timeBetweenWaves = 8f;。 - 遍历
waves:等待timeBetweenWaves,记录"Wave " + (i + 1),然后像之前一样生成waves[i]。 - 循环结束后,记录
All waves sent。
按“开始”:8 秒后,控制台会显示 Wave 1,接着 Grunts 会出现。然后按“检查”。
亲手试试
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WaveSpawner : MonoBehaviour
{
[SerializeField] private List<Wave> waves = new List<Wave>();
[SerializeField] private Transform[] waypoints;
void Start()
{
StartCoroutine(RunWaves());
}
IEnumerator RunWaves()
{
Wave wave = waves[0];
for (int n = 0; n < wave.count; n++)
{
Enemy enemy = Instantiate(wave.enemy, waypoints[0].position, Quaternion.identity);
enemy.waypoints = waypoints;
yield return new WaitForSeconds(wave.spacing);
}
}
}
Unity 塔防游戏中的所有课
自己练习: Unity 在线编辑器