obsidian/笔记文件/2.笔记/对话系统 Odin插件_第二章.md
2025-03-26 00:02:56 +08:00

4.7 KiB
Raw Permalink Blame History

整一个枚举,是用来

!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