本文为孤月蓝风编写,转载请注明出处:http://fengyu.name/?cat=game&id=296
DiaQ是plyGame旗下的一款对话及任务系统。拥有可视化的对话及任务编辑器,能够很方便的处理对话及任务。但是官方文档却不给力,经过一般研究,终于会使用简单的对话系统了,分享给大家。
首先,你需要安装DiaQ插件,DiaQ有单独的,同时也被包含于plyGame中,至于哪里有的“卖”,请使用伟大的搜索引擎。
在安装DiaQ插件后,菜单栏的Windows中会出现DiaQ的菜单,Tools中会有PL Young菜单,下面会有DiaQ。
我们打开DiaGraphs编辑器,Tools > PL Young > DiaQ > Graph Editor。
图标从左到右依次为:增加、删除、向上移、向下移、修改名称、打开任务编辑器、设置、帮助文档。
我们点击增加,列表中增加一项,之后我们就可以在右边的窗口中创建对话及流程了。选中左侧列表中的一个对话,右边最上方会出现和左边一样的工具条。
从左到右依次为:条件判断、发送消息(SendMessage事件)、设置变量值、等待、调试、任务奖励、完成任务、任务状态、对话。
这一篇中,我们只讲最后一个:对话。
点击对话图标,会在下面视图中创建一个对话框,单机选中对话框,在Unity的Inspector面板中,会显示当前对话框的各种属性。
Dialogure Text:对话内容
Responses:对话选项,例如,NPC询问你是否接受任务,可以回答“接受”和“拒绝”,每一个选项一行,点击右侧的加号添加
Linked Quest:连接到任务
Id:当前对话框的ID
Custom Ident:当前对话的自定义ID,类型为string字符串
Comment:用于对话编辑器中显示的备注信息,用于说明次对话用途,只在编辑器中显示,对话中不显示
Show in Graph:上面的备注信息是否显示在编辑器中
Node MetaData:对话传递的数据,可以在这里传递各种类型的数据,供下一条对话使用
现在,你可以随便创建几个对话内容,并将它们连接起来。你可以点击箭头,会出现连接线,再点击需要连接的对话,两个对话框就会被线连接起来。
在所有对话的内容完成之后,你会在 Assets / plyData / DiaQ
文件夹中看到有一个DiaQ的Prefab,将它添加进游戏场景中。
接下来我们写对话的代码。
首先,你需要:
using plyCommon; using DiaQ;
其次,我们需要声明一个变量,用于保存获取到的对话内容:
private plyGraph conversation = null;
然后在Start
中,获取对话内容(这里你可以通过Ident
和Name
两种方式获取,*选择):
conversation = DiaQEngine.Instance.graphManager.GetGraphByIdent(dialogureID.ToString());
之后,所有的对话,都是在GUI中显示,所以代码均写在OnGUI
中:
//判断当前是否有对话正在进行 if (DiaQEngine.Instance.graphManager.ActiveGraph() == null) { //没有对话进行则开始对话 DiaQEngine.Instance.graphManager.BeginGraph(conversation); } else { //获取对话节点 DiaQNode_Dlg dlg = DiaQEngine.Instance.graphManager.NodeWaitingForData() as DiaQNode_Dlg; //如果节点不为null,则调用内容 if (dlg != null) { //获取对话内容,并赋值 string _text = dlg.dialogueText; Rect dialogbox = new Rect(0,0,300,300); GUI.Box(dialogbox, _text); //获取选项数量,并循环所有选项,将选项用按钮输出 _choicesCount = dlg.responses.Length; for (int i = 0; i < _choicesCount; i++) { //dlg.responses[i]为选项的内容文字 if (GUI.Button(new Rect(0, i * 45), 100, 50), dlg.responses[i])) { //根据选项跳转到下一个相连的对话 DiaQEngine.Instance.graphManager.SendDataToNode(i); } } } }
这样,我们完整的创建并调用了使用DiaQ制作的对话。
本文为孤月蓝风编写,转载请注明出处:http://fengyu.name/?cat=game&id=296