Menu
CoddyTech

每一波

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)。

challenge icon

挑战

中等

发送每一波敌人,每波开始前都暂停一段时间。

  1. 在 WaveSpawner 中,添加 [SerializeField] private float timeBetweenWaves = 8f;。
  2. 遍历 waves:等待 timeBetweenWaves,记录 "Wave " + (i + 1),然后像之前一样生成 waves[i]。
  3. 循环结束后,记录 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 在线编辑器