6.1 基本概念
俗话讲的好:蛇无头而不行,鸟无翅而不飞。在这个游戏里面,我们从这时候要确定一个管理者Game Master!从他这里发出一个又一个攻击波。
老余用Create Empty菜单建立了Game Master,在他下面新建了制造攻击波的类Wave Spawner
6.2 资深玩家用的API
WaveSpawner的类就是要动态的产生坏蛋攻击波。老余虽然是精通J2EE,不过IT口也是隔行如隔山,老余翻了不少资料,也问了些高人,好不容易理清楚这个门道:
enemyPrefab 是预制类,要跟Prefab的Enemy关联起来,动态生成坏蛋的时候,就找这个预制类
spawnPoint 就是起点坐标,把START那个Cube扔过来就行,瞪大眼睛,一定要找到Enemy Prefab和Spawn Point哈
整个攻击波制造的点就在Update,精华就在用协程(Coroutine - yield return)方式陆续的生成新攻击波,根据预制类动态生成小蛋的要点就在Instantiate。
using System.Collections;
using UnityEngine;
public class WaveSpawner : MonoBehaviour
{
public Transform enemyPrefab;
public Transform spawnPoint;
public float timeBetweenWaves = 5f;
private float countdown = 2f; // 攻击波的计数器,后面Wave Spawner会有改进,增加难度
private int waveIndex = 0;
// Update is called once per frame
void Update()
{
if (countdown <= 0f)
{
StartCoroutine( SpawnWave()); // 用协程(Coroutine - yield return)方式陆续的生成新攻击波,否则线程会相互重叠
countdown = timeBetweenWaves; // 重新计数
}
countdown -= Time.deltaTime; // 计数器减一秒
}
IEnumerator SpawnWave()
{
waveIndex++;
for (int i = 0; i < waveIndex; i++)
{
SpawnEnemy();
yield return new WaitForSeconds(0.5f); // 协程间隔0.5秒
}
}
void SpawnEnemy()
{
// 根据指定的Prefab,动态创建实例
Instantiate(enemyPrefab, spawnPoint.position, spawnPoint.rotation);
}
}
话不在多而在精,在明白的代码也要调试,老余试了一上午,终于搞定了,这是运行效果: