obsidian/笔记文件/2.笔记/节奏天国_第三章.md
2025-03-26 00:02:56 +08:00

9.2 KiB
Raw Blame History

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

!Pasted image 20220414222547.png

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

!Pasted image 20220414222557.png

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

!Pasted image 20220414222656.png

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

!Pasted image 20220414222701.png

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

!Pasted image 20220414222704.png

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

!Pasted image 20220414222709.png

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

!Pasted image 20220414222911.png

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

!Pasted image 20220414222915.png

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

!Pasted image 20220414222920.png

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

!Pasted image 20220414222924.png

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

!Pasted image 20220414222928.png

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

!Pasted image 20220414222933.png

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

!Pasted image 20220414222939.png

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

!Pasted image 20220414222951.png

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

!Pasted image 20220414222957.png

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

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

!Pasted image 20220414223036.png

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

!Pasted image 20220414223123.png

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

!Pasted image 20220414223132.png

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

!Pasted image 20220414223137.png

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

!Pasted image 20220414223142.png

继续补充两个方法;

!Pasted image 20220414223146.png

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

!Pasted image 20220414223150.png

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

!Pasted image 20220414223154.png

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

!Pasted image 20220414223159.png

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

!Pasted image 20220414223203.png

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

!Pasted image 20220414223208.png

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

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

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

!Pasted image 20220414223212.png

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

!Pasted image 20220414223215.png

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

!Pasted image 20220414223220.png

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

!Pasted image 20220414223224.png

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

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

!Pasted image 20220414223228.png

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

!Pasted image 20220414223232.png

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

!Pasted image 20220414223237.png

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

!Pasted image 20220414223240.png

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

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

!Pasted image 20220414223246.png

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

!Pasted image 20220414223249.png

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

!Pasted image 20220414223254.png

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

!Pasted image 20220414223257.png

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

!Pasted image 20220414223301.png

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

!Pasted image 20220414223305.png

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

!Pasted image 20220414223309.png

完成挂载后:

!Pasted image 20220414223313.png

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

!Pasted image 20220414223318.png

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

!Pasted image 20220414223332.png

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

!Pasted image 20220414223337.png

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

!Pasted image 20220414223343.png

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

移动也是通过dotween控制即可

!Pasted image 20220414223348.png

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

!Pasted image 20220414223352.png

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

!Pasted image 20220414223356.png

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

!Pasted image 20220414223359.png

再重写一下Update更新函数

!Pasted image 20220414223403.png

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

!Pasted image 20220414223407.png

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

!Pasted image 20220414223410.png

放上去之后:

!Pasted image 20220414223413.png

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

!Pasted image 20220414223418.png

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

!Pasted image 20220414223421.png

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

!Pasted image 20220414223424.png

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

!Pasted image 20220414223428.png

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

!Pasted image 20220414223433.png

加一个训练模式的整合;

!Pasted image 20220414223436.png

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

!Pasted image 20220414223439.png

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

!Pasted image 20220414223443.png

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

!Pasted image 20220414223447.png

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

!Pasted image 20220414223451.png

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

!Pasted image 20220414223454.png

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