本文为孤月蓝风编写,转载请注明出处: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中,获取对话内容(这里你可以通过IdentName两种方式获取,自由选择):

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

Unity插件之plyGame教程:DiaQ对话系统的更多相关文章

  1. Unity插件-NGUI使用教程

    Unity插件-NGUI使用教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 NGUI 一款强大的次 ...

  2. 《图说VR入门》——Unity插件DK2使用教程

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53339254 作者:car ...

  3. Unity插件-ShareSDK使用指南

    Unity插件ShareSDK使用教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Summariz ...

  4. 【Unity插件】LitJson杂谈

    距离上一次更新博客已有一段时间了,一实习就懒了,嘿嘿.这次谈一下在实习里新碰到的一个Unity插件--LitJson(也可以去官网下载最新版). 开场白 LitJson是一个开源项目,比较小巧轻便,安 ...

  5. Egret3D学习笔记一 (Unity插件使用)

    一 官方教程: http://developer.egret.com/cn/github/egret-docs/Engine3D/getStarted/getStarted/index.html 大部 ...

  6. Unity插件之Unity调用C#编译的DLL

    Unity插件分为两种:托管插件(Managed Plugins)和本地插件(Native Plugins).本文先来说说Unity中的托管插件,本地插件的文章留到下一篇文章再说. 有时候我们会有这样 ...

  7. Sublime Text 2安装汉化破解、插件包安装教程

    原文地址: Sublime Text 2安装汉化破解.插件包安装教程_百度经验 http://jingyan.baidu.com/article/ff4116259b057c12e48237b8.ht ...

  8. Unity插件之NGUI学习(8)—— Table和NGUI尺寸转换为世界坐标系尺寸

    依据 Unity插件之NGUI学习(2),创建一个UI Root,在UI Root下创建一个Texture作为背景图,并设置图片,在Wiget下调整大小:然后在UI Root下再创建一个Panel. ...

  9. Unity 4.3 2D 教程:新手上路

    这篇文章译自 Christopher LaPollo 先生的 Unity 4.3 2D 教程的第一部分 Unity 4.3 2D Tutorial: Getting Started 感谢这套优秀教程的 ...

随机推荐

  1. C++ 可配置的类工厂

    项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...

  2. ASP.NET Aries 入门开发教程3:开发一个列表页面及操控查询区

    前言: Aries框架毕竟是开发框架,所以重点还是要写代码的,这样开发人员才不会失业,哈. 步骤1:新建html 建一个Html,主要有三步: 1:引入Aries.Loader.js 2:弄一个tab ...

  3. .NetCore中的日志(2)集成第三方日志工具

    .NetCore中的日志(2)集成第三方日志工具 0x00 在.NetCore的Logging组件中集成NLog 上一篇讨论了.NetCore中日志框架的结构,这一篇讨论一下.NetCore的Logg ...

  4. windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分 ...

  5. 【Python五篇慢慢弹】快速上手学python

    快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...

  6. C++ 11 多线程--线程管理

    说到多线程编程,那么就不得不提并行和并发,多线程是实现并发(并行)的一种手段.并行是指两个或多个独立的操作同时进行.注意这里是同时进行,区别于并发,在一个时间段内执行多个操作.在单核时代,多个线程是并 ...

  7. JavaWeb——Servlet

    一.基本概念 Servlet是运行在Web服务器上的小程序,通过http协议和客户端进行交互. 这里的客户端一般为浏览器,发送http请求(request)给服务器(如Tomcat).服务器接收到请求 ...

  8. Android中Activity处理返回结果的实现方式

    大家在网上购物时都有这样一个体验,在确认订单选择收货人以及地址时,会跳转页面到我们存入网站内的所有收货信息(包含收货地址,收货人)的界面供我们选择,一旦我们点击其中某一条信息,则会自动跳转到订单提交界 ...

  9. github免输用户名/密码SSH登录的配置

    从github上获取的,自己整理了下,以备后用. Generating an SSH key mac windows SSH keys are a way to identify trusted co ...

  10. 分享一个php的启动关闭脚本(原)

    自己简单写的一个php服务的启动脚本和大家分享 思路(实现的原理): 1:function模块+case语句多分支判断 2:通过添加# chkconfig: 2345 43 89注释实现开机自启动(前 ...