对话系统 Odin插件_第二章.md 4.7 KB

整一个枚举,是用来

![[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]]