总结
这是一个叫做“符文冲突”的塔防游戏,包含多次攻击波、多种炮塔类型和多种敌人类型
大致分为:制作塔防游戏、创建炮塔、发布游戏
部分代码展示
//1
public static WaveManager Instance;
//2
public List enemyWaves = new List();
//3
private float elapsedTime = 0f;
//4激活 active激活
private EnemyWave activeWave;
//5
private float spawnCounter = 0f;
//6
private List activatedWaves = new List();
代码说明:
(1)就像Waypoint系统,这个类也使用单例模式,使自己在任何地方可以使用这个变量。
(2)将由这个类产生敌人名单的wave。
(3)此变量跟踪该关卡自开始以来所经过的时间。
(4)目前正在产生的敌波。
(5)这是跟踪最后一次敌波产生的时间。每次产生敌波后,它被复位到0,并且在每帧中递增。
(6)如果wave列表已启动的,任何wave都不会重复。
③ 在刚刚添加的变量声明下,添加这些方法:
//1
void Awake()
{ Instance = this; //单例设置模式
}
//2
void Update() {
elapsedTime += Time.deltaTime;
SearchForWave();
UpdateActiveWave();
}
private void SearchForWave() {
//3
foreach (EnemyWave enemyWave in enemyWaves) {
//4
if (!activatedWaves.Contains(enemyWave)
&& enemyWave.startSpawnTimeInSeconds <= elapsedTime) {
//5
activeWave = enemyWave;
activatedWaves.Add(enemyWave);
spawnCounter = 0f;
//6
break;
}
}
}
//7
private void UpdateActiveWave() {
}
代码说明:
(1)为脚本本身设置实例变量。
(2)添加到elapsedTime。检查是否需要启动新的wave,并在每帧更新活动的wave。
(3)循环遍历enemyWaves列表。
(4)wave在没有开始之前,检查在此关卡上花费的时间是否已经超过了该wave的开始时间。
(5)如果是,让敌人出动。将其添加到已激活的wave列表中,然后重置敌波产生计数器。
(6)找到一个合适的wave列表去替代之前的。
(7)到现在为止这都是一个空方法,这是下一部分内容。
④ 现在来实际产生敌人,在UpdateActiveWave ()中添加此代码:
//1
if (activeWave != null)
{ spawnCounter +=
Time.deltaTime;
//2
if (spawnCounter >= activeWave.timeBetweenSpawnsInSeconds) { spawnCounter = 0f;
//3
if (activeWave.listOfEnemies.Count != 0) {
//4
GameObject enemy = (GameObject)Instantiate( activeWave.listOfEnemies[0], WayPointManager.Instance. GetSpawnPosition(activeWave.pathIndex),Quaternion.identity);
//5
enemy.GetComponent().pathIndex = activeWave.pathIndex;
//6
activeWave.listOfEnemies.RemoveAt(0);
} else {
//7
activeWave = null;
//8
if (activatedWaves.Count == enemyWaves.Count) {
// All waves are over
}
}
}
}
代码说明:
(1)只有在有激活wave的时候才能继续。
(2)如果敌波产生的计数器高于激活wave的timeBetweenSpawnsInSeconds变量,则需要产生一个敌人。在这种情况下,也重置敌波产生的计数器。
(3)检查当前wave中是否仍有敌人。
(4)在第一个Waypoint的位置产生敌人名单列表中的第一波敌人。
(5)设置新的敌人的pathIndex,让它知道它应该移动。
(6)删除敌人名单列表中的第一个条目。
(7)如果检查//2失败,则当前wave中不再产生敌人。通过给它一个null值来清空activeWave变量。
(8)如果总wave的数目等于已经激活的wave的数目,那就意味着所有的wave都结束了。
把这些部分结合起来添加到WaveManager中,这是WaveManager开始产生敌波所有需要的功能!