整一个枚举,是用来 ![[Pasted image 20240522140107.png]] 继续,整一个对话事件数据 首先是事件的枚举选择,然后是事件对应的参数 ![[Pasted image 20230529180035.png]] 注意一下,命名空间 ![[Pasted image 20230530102753.png]] 然后,继续加一个序列化的玩家选择类 就是游戏内,玩家的选项,其中包含选项的文本显示,还有对应的事件列表 ![[Pasted image 20230530102809.png]] 对话相关的数据类都定义好了 回到游戏管理类,整一个检测对话数据配置的工具 也是先确认命名空间 ![[Pasted image 20230531084125.png]] 拿到Resources目录下的所有挂载了DialogConf脚本的数组 然后,遍历对话数据配置文件,如果NPC配置数据为空,或者头像为空,就打印报错提示 ![[Pasted image 20230530103335.png]] 运行,相关log也是正常显示的 ![[Pasted image 20230531084253.png]] ![[Pasted image 20230530114204.png]] 尝试移除配置 ![[Pasted image 20230531084321.png]] 重新运行,报错提示也是正常的 ![[Pasted image 20230531084338.png]] 在游戏管理类,外部也声明一个配置数组 ![[Pasted image 20230530114446.png]] 在Awake函数里,对他完成初始化,也是调用Resources目录下的所有DialogConf配置文件 ![[Pasted image 20230530114533.png]] 再写一个获取函数 ![[Pasted image 20230530114653.png]] 在对话的主窗体,先声明一个当前的对话配置,还有当前的索引 ![[Pasted image 20230531084818.png]] 之前还写漏了名字的ui文本声明,也加一下 ![[Pasted image 20230531084910.png]] 在Start函数获取Text文本组件 ![[Pasted image 20230531084949.png]] 开始整一个开始对话的函数体,传参是对话的配置文件,还有对话的序号索引 ![[Pasted image 20230531085147.png]] 重温之前定义好的对话事件枚举,一共是四个 ![[Pasted image 20240522142238.png]] 所以就对应了三个事件方法: 1、触发下一条对话,就是索引+1,然后继续调用开始对话的函数 2、退出对话,直接打印log就好 3、跳转对话,也是通过传参,设定好索引值,然后调用开始对话函数就好 ![[Pasted image 20230531085551.png]] 4、屏幕效果的函数,之前已经写好了,就是协程实现,红色闪烁一下,然后又变回白色 ![[Pasted image 20230531090001.png]] 整一个跳转不同事件的函数:其中跳转对话的,传参是整型数据,跳转到屏幕效果的函数,传参是浮点数据,因为屏幕效果的显示时间,这个是比较动态变化的,不一定就是整数 ![[Pasted image 20230531090439.png]] 简单介绍一下,选项类的代码实现,因为是涉及到按钮点击,所以除了mono之外,还继承了这些 ![[Pasted image 20230531090708.png]] 这里就是进入ui触发的颜色变化 ![[Pasted image 20230531090825.png]] 继续,先声明一个玩家选择的对象 ![[Pasted image 20230531090916.png]] 需要对初始化函数,做一下处理,先注释 ![[Pasted image 20230531111146.png]] 改造一下初始化函数,传参改成是传递玩家选择DialogPlayerSelect 文本显示,改成是调用model的Content选项文本 ![[Pasted image 20230531120153.png]] 再补充一句代码,对玩家选择完成赋值 ![[Pasted image 20230531134200.png]] 回到对话主窗体,完善开始对话逻辑 注掉默认的协程,先设置一下使用的当前对话配置,和当前索引 然后,调用一下开始对话的具体逻辑实现; ![[Pasted image 20230531120634.png]] 回到对话数据模型类,增加俩label,分别是npc对应的事件触发,还有玩家选项 ![[Pasted image 20230531120945.png]] NPC对话主窗体,完善开始对话的具体逻辑 首先拿到当前索引的对话数据模型本体,然后修改npc头像图标,还有npc名字文本; 然后,调用协程让npc开始说话,其中的传参,也是通过对话数据模型的Content拿到的 然后,在对话主窗体,遍历其中的npc事件队列,完成传参,触发事件逻辑 删除已有的玩家选项,然后遍历数据模型包含的玩家选项,实例化出来最新的玩家可操作对话选项,完成初始化 ![[Pasted image 20230531132248.png]] 需要注意的是,删除已有玩家选项,索引是从1开始的,因为不能删掉自身 ![[Pasted image 20240522140233.png]] 这个实例化的模版,也是Resource目录下对应的 ![[Pasted image 20230531132840.png]] ![[Pasted image 20230531132925.png]] 玩家点击选项,相关的触发事件逻辑,也是用的,跟NPC角色的同一套 也是直接遍历,然后通过前面实例化出来的单例,调用事件触发就好 ![[Pasted image 20230531133020.png]]