1.Alternate Singleton
主要介绍:
修改Singleton
具体实现:
之前Intermediate Programming: Unity Game Dev Courses(1)- Game Managers, Loaders, and the Game Loop教程写的抽象Singleton实际效果并不Single,摁空格键可以多次加载Main场景,如果其他场景里出现Singleton的对象,则会出现Bug,而不是保持一个Singleton。
我们新建Singleton模式的脚本在Utils文件夹下,命名为Manager
此例使用Singleton模式的有GameManager和UIManager,我们分别修改
2.Enemies
主要介绍:
由固定数量固定地点怪物,改成随机怪物生成(LINQ的使用)
生成多波怪物并且一波强过一波
具体实现:
1.随机怪物生成,和LINQ介绍
Monobehaviours文件夹下新建脚本MobManager用来生成怪物,并存入巡逻点
注意里面使用了LINQ,LINQ介绍
把写好的脚本绑到同名对象上
2.通过定义SpawnWave SO类型生成多波怪物
ScriptableObjects文件夹下新建脚本MobWave,为SO类型,定义怪物波相关数据。
在项目里新建两个MobWave类型,表示两拨怪
我们想要player砍死一波怪后生成下一波,直到所有波数的怪物都死了就提示player赢了。
实现思路是每波怪spawn时记录这波一共多少怪,每只怪死了就-1,直到为0.然后生成下一波怪,波数index-1,直到index达到最大值且spawn为0就通关。
怪物死亡触发,我们用UnityEvent。
下面先来修改MobManager
然后新建Event,在Events脚本里添加
最后在小怪脚本NPCController里修改当怪物死亡触发
把MobWave数据填入,运行后可看到效果
3.怪物一波比一波强
在MobWave SO类型中我们设定了一系列怪物相关数值,上面我们只是用了NumberOfMobs来respawn怪物,下面我们使用它关于怪物的生命值,伤害值,防御值来达成怪物一波强于一波。
首先MobWave SO的设置里第2波的各项数值应该大于第1波,然后我们把之前怪物的固定数值改成读取MobWave
在CharacterStats脚本里添加修改怪物属性的方法