2021-05-14

总结

这是一个叫做“符文冲突”的塔防游戏,包含多次攻击波、多种炮塔类型和多种敌人类型

大致分为:制作塔防游戏、创建炮塔、发布游戏

部分代码展示

//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开始产生敌波所有需要的功能!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值