回到音轨控制者,声明一下,需要使用到的,各个对象变量;

然后写一个,检测是否碰击中音符对象的方法;

再写一个,音轨控制器,初始化的方法;

在音符管理器中,再写一个方法,是用来检测,是否生成下一个音符的;

回到关卡类中,新增一个通用方法,用来计算玩家,在当前关卡得分的评定等级;

再写一个通用方法,是用来处理,完成当前关卡的逻辑处理;

完善一下,当前关卡的游戏执行逻辑,也是通用的部分;

回到音符控制器,添加一个函数方法,用来判断,事件负荷上,音符ID是否跟当前音轨ID匹配;

继续添加两个方法,分别是添加事件,和清除无效音符的;

继续添加,重置音轨状态,和回收音轨控制者的函数方法;

回到关卡类,完善一下,退出关卡的相关逻辑;

继续加一下,事件音轨的匹配方法;

添加一个,进入当前关卡,播放音乐,正式开始游戏的方法;

以上,就是关卡类的,通用方法了; 然后,回到音符对象类,完善一下,音符对象的函数方法;

继续,添加一个更新函数;

以上,就是音符对象的各个函数方法接口了;

回到游戏管理类中,添加一个“游戏启动”的整合相关; 其中,添加一个,初始化游戏的方法;

回到推动游戏进程的管理类中,创建一个方法,是用来重置游戏的;

再创建一个空方法,是用来实例化关卡对象的; (这个是用来,实例化具体关卡的,所以是涉及到,每一关具体的业务逻辑,所以需要后面再补充)

再创建一个方法,是用来加载当前关卡对象,开始游戏的;

继续加一个方法,是用来退出当前关卡的;

继续补充两个方法;

回到游戏管理类中,补全“游戏管理”整合的,函数调用接口;

然后,补全一下,游戏启动的接口;

然后,在游戏管理类中,补全Start函数,Update函数;

回到关卡类,加上第一关的类,当然是继承自关卡类的; 需要实现的类,也点击安按钮,自动添加一下;

然后,加一下,需要使用到的对象;

可以看到,上面的对象,有一个是首长,所以就说明,第一关这些具体逻辑,是涉及到了,具体的游戏内,运行对象的;

而首长的设定是,后面会变成敌人的,所以在处理首长之前,需要新建一个敌人(雪人)的脚本,而敌人本质上,就是音符对象,所以敌人,又是继承自,音符对象的;

在游戏文件夹中,创建一下;

调用一下,需要使用到的命名空间;

在游戏文件夹中,再创建一个,首长的脚本文件;

添加一下,命名空间的引用,优化一下代码结构,继承关系,声明一下,需要使用到的各个对象;

首长在最开始的时候,设定不是坏人,而是引导玩家的一个角色,所以会有,他跟玩家对象的教学关卡,也就有,他跟玩家的对话;

所以新增几个方法,分别是用来操作,显示和隐藏提示内容的;

首长跟玩家对话完毕后,会跑出屏幕外,所以加一个接口,是用来处理,跑出屏幕外的;

继续写两个方法,分别是,重置司尼状态的,和对象池回收的; 其中是有包含,父类中的,回收音符的方法;

然后,写好首长的Awake唤醒函数; 其中包含了事件的注册,初始位置的赋值等操作;

以上,就是首长,在教学关,需要用到的函数方法了; 而首长这个脚本,是需要挂在,首长这个预制体身上的;

而首长是有动画的,在原工程可以看到,所以是直接将动画,复制过去就好;

然后可以发现,首长的动画控制器,是一个衍生的动画控制器; 而衍生的动画控制器,是需要一个父动画控制器的,而目前为空;

它的父动画控制器,是玩家的动画控制器,所以需要把玩家的动画,也整体复制过来;

复制过去之后,首长的父动画,就自动关联上去了; 但是其中的动画内容是空的;

也没关系,直接拖曳填充过去,即可;

动画准备好了,脚本也准备好了,之后就直接复制,对应的预制体过去就好;

复制过去之后,可以看到,动画是自动挂上去了,而脚本文件没有自动挂上去,手动挂上去就好;

完成挂载后:

在关卡中,还需要使用到的,比较关键的物品,还有这个,音符控制器(可以看作是一个空物体),直接复制过去就好;

然后,还有一个,比较关键的预制体,就是玩家本身; 玩家本身是没有挂载脚本,只有动画,直接复制过去就好;

这两个预制体,分别是,目标物的行进路径,和销毁路径,也是直接复制过去就好;

然后玩家需要在第一关中,击打的雪人,也是需要一个脚本控制的,创建一下;

优化一下代码结构,它默认也是一个音符对象(被玩家击打,所以也是继承自音符对象,即可)

移动也是通过dotween控制即可;

写两个方法,分别是,播放被击中的音效,还有对象池回收相关的;

然后,重写一下,受击函数;

然后,重写一下初始化函数;

再重写一下Update更新函数;

在原工程中,这个就是第一关中,需要使用到的,目标雪人,直接复制过去就好;

依然会提示,脚本丢失; 没事,直接放上去就好;

放上去之后:

然后,还需要一个,雪人音轨控制者,用来单独控制雪人的生成相关,是继承自,默认的音轨控制者; 先在Game目录下,创建脚本;

完善一下代码结构; 写好检测,生成下一个音符的接口;

回到关卡类,在第一关中,写一个方法,是用来处理,获取雪人的移动路径,和销毁路径的;

然后,完成第一关的,进入关卡方法的重写操作;

加一个标签,为了跟后面的区分;

加一个训练模式的整合;

训练模式的设定,是首长会向玩家,说出不同的指令,例如攻击和跳起,而玩家需要执行指令;

然后,就是重玩训练模式的方法,就是各项的重置了;

准备好这些之后,就写一下,正式进入训练模式的函数接口了;

完成第一关和训练关的,进入逻辑之后,就可以开始重写,第一关的整体逻辑处理了; 但是可以发现,override的时候,出现了报错提示;

原因是,它的父类中,这个函数不是virtual虚函数,修改一下就好; 报错就消失了;

以上,就是第一关的相关逻辑了;