整一个枚举,是用来
![[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]]