Unity下的简单DialogSystem对话系统实现(支持多个对话树)

这篇具有很好参考价值的文章主要介绍了Unity下的简单DialogSystem对话系统实现(支持多个对话树)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


GitHub 链接

DialogSystem(Unity)

一个简小但是足够满足一定基础的对话系统。

初始使用介绍

初始设置步骤:

  1. 将package文件夹中的DialogSystem2添加到项目之中。
    Unity下的简单DialogSystem对话系统实现(支持多个对话树),unity,游戏引擎
  2. 在Hierarchy窗口面板中创建一个空物体(建议命名成DialogSystem),添加代码DialogSystemManagerDialogMissionEventHandler,并将DialogMissionEventHandler拖拽到DialogSystemManager的相应位置。
  3. 在Hierarchy窗口面板中创建一个Canvas,一个带有子物体Text的Panel,两个button(为了区分,下文分别叫做button_1和button_2),并将两个button和panel设为不可见。(如图两个button分别叫Option_1和Option_2)。
  4. 将刚刚创建的text,panel,两个button拖拽到DialogSystemManager上面,并且button_1的onClick处调用DialogSystemManager
PlayMissionOption_1();

button_2的onClick处调用DialogSystemManager

PlayMissionOption_2();

Unity下的简单DialogSystem对话系统实现(支持多个对话树),unity,游戏引擎

  1. 在Asset文件夹下创建一个DialogMissionSO文件夹,并右键点击"Create"->“DialogMission”->“New DialogMissionSOManager”,并将该SO文件拖拽到DialogSystemManager的相应位置。
    Unity下的简单DialogSystem对话系统实现(支持多个对话树),unity,游戏引擎

创建第一个DialogMissionSO:

  1. 在刚刚创建的DialogMissionSO文件夹下,右键点击"Create"->“DialogMission”->“New DialogMissionSO”。该SO共有五个变量,分别为 Text Str , Text Asset , Option Mission Index , Option Mission Description。 在默认情况下,DialogSystemManager 会优先读取 Text Str 中的字符作为对话文本, 其次才是文件格式的 Text Asset

    对话文本Example:

    Hello

    World

    则,对话会分两次输出,第一次输出 Hello , 第二次输出 World
  2. 将该SO文件拖拽至DialogMissionSOManager的list下,并记好该文件在list中的index。(由于是第一个SO),则默认为0。
    Unity下的简单DialogSystem对话系统实现(支持多个对话树),unity,游戏引擎

播放刚刚创建的第一个DialogMissionSO:

  1. 为了方便,可以在Canvas组件下再创建一个button,并将其命名为 AddMissionSO , 并在其onclick处调用DialogSystemManager下的AddMissionSO()函数,并将参数赋值为刚刚记录的0。
  2. 点击play按钮开始运行当前场景,点击 AddMissionSO 按钮,会发现panel组件自动亮起,并且播放了刚刚的对话。(但是此时对话是一闪而过,这涉及变量修改,会在后文介绍),但至此,对话的基本功能已经实现完毕。

如何实现连续的对话树功能

DialogMissionSO 两个List变量介绍:

  • Option Mission Index

    记录该Mission之后会有的Mission下标(在DialogMissionSOManager下的下标)。由于DialogSystemManager的代码只写了支持两个button的函数(可以使用者自行仿照补充,或者我无聊了更新一下),所以这里最多记录两个下标。例如,在第一个创建的 DialogMissionSO 的OptionMissionIndex列表下添加1和2,则表明该对话会有两个选项,分别每一个选项分别对应DialogMissionSOManager中列表1的对话SO和2的对话SO。
  • Option Description

    记录该Mission的对话选项会是什么文字内容

创建新的两个DialogMissionSO:

  • 仿照上文的第一个创建方式,分别命名为“Mission_2”和“Mission_3”,并添加到DialogMissionSOManager下。
  • 将创建的第一个DialogMissionSo的OptionMissionIndex列表下添加1和2,并且添加两个Option Description,分别为“Mission_2”和“Mission_3”。

播放对话树:

  • 点击play按钮开始运行当前场景,点击 AddMissionSO 按钮,会发现第一段对话一闪而过,并且场景中点亮了两个按钮,上面的文字分别为“Mission_2”和“Mission_3”。至此,我们已经尝试了作为对话树的所有基本功能。
    Unity下的简单DialogSystem对话系统实现(支持多个对话树),unity,游戏引擎
    如图为当前版本包的demo表现形式。

如何实现在触发选项的同时触发相应的事件:

DialogMissionSO 的 eventIndex介绍:

  1. 该默认值应为-1,表示触发该对话的时候没有任何事件发生。如果其不为-1,则表明该对话任务在DialogMissionEventHandler有相应的DialogMissionEvent需要调用,并且会调用下标为eventIndex的DialogMissionEvent

创建DialogMissionEvent:

  1. 推荐在Hierarchy窗口面板下创建一个空物体,并命名为"MissionEvent_1",并添加DialogMissionEvent组件。

  2. 将要在该对话任务调用的函数加入到该组件下的 _Option Event_中。

  3. Unity下的简单DialogSystem对话系统实现(支持多个对话树),unity,游戏引擎

  4. 将该物体“MissionEvent_1”拖拽至物体DialogManager的DialogMissionEventHandler下。由于是第一个任务,所以应当其下标为0

  5. 若设置在播放Mission_3的时候调用该模块事件,只需要找到相应的SO,并将其EventIndex修改为该下标0。

实现该模块:

  • 点击play按钮开始运行当前场景,点击 AddMissionSO 按钮,会发现第一段对话一闪而过,并且场景中点亮了两个按钮,上面的文字分别为“Mission_2”和“Mission_3”,点击Mission_3,会发现即可调用刚刚所设置的函数。

DialogSystemManager的Player Setting参数介绍

  1. wordTimeGap: 每一个字符输出的时间间隔(float)。
  2. sentenceTimeGap: 每一句话输出的时间间隔(float)。(默认为一个回车是一句话,而非一个句号)。
  3. MissionTimeGap: 每一个Mission之间的调用间隔(float)(该参数只在两个对话或两个对话树中间有效,可以让两个不同的对话有一些间隔,而一个对话树内部通过选项调用下一个对话,则不会有该时间参数间隔)。
  4. MissionEdgeTime: 判断一个对话刚刚结束的结束状态保持时间(float)(与后面一个参数有关).
  5. KeyToPassTheSentence:(KeyCode)顾名思义,点击该Key的时候,该句子会直接输出完整,并进入sentenceTimeGap间隔,等待播放下一句话。
  6. JustFinishMission: 该bool变量只是用于编辑器调试时方便观看,是私有变量,在上面变量设置的EdgeTime内,该变量为true。而在别的地方,可以调用函数 DialogSystem.instance.JustFinishPlay()函数来获取该变量。
  7. MissionList: 私有变量,用于调试看当前有哪些对话任务待播放。(支持往里面疯狂塞对话,会形成队列逐个播放)。

一些其他的使用和函数

动态切换说话者的图片

-Image:该Header下共有三个变量,分别对应npc1的图片,npc2的图片和图片应该出现的地方。在代码DialogSystemManager下的函数SetTextUI()可以看到,如果当前句子为一个npc的名字,便会切换faceImage成相应npc的图片。要想拓展或修改该功能,目前应当去代码处手动添加修改。

DialogSystemManager 下的一些公开方法

  • AddMission(DialogMission mission)

    该方法可以在其他地方new 一个 C语言原生的DialogMission类,参数SO类型的Mission相同,会将该任务添加到对话待播放的列表尾部。
  • ClearMissionRightNow()

    清除当前的播放任务。
  • ClearAllMission()

    清除所有任务(包括当前任务和待执行任务)。
  • StartMissionSO(int index)

    清除所有任务,剩余作用于AddMissionSO(int index)相同.
  • AddMissionSOAtFirst(int index)

    将该对话SO添加至播放列表的最前面。(是用于对话树插队的)。
  • bool IsOnMission()

    是否在播放对话当中。
  • bool IsOutPutWord()

    是否在打字,与上一个函数不同,当Mission不再打字而是在sentenceTimeGap间隔中,仍算OnMission,但不算OutPutWord
  • bool IsOnMissionGap()

    是否在两个任务中间的MissionTimeGap中间等待。
  • JustFinishPlay()

    是否刚刚完成一个对话或对话树。与MissionEdgeTime一同使用。

文章来源地址https://www.toymoban.com/news/detail-777601.html

到了这里,关于Unity下的简单DialogSystem对话系统实现(支持多个对话树)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity实战】实现强大通用易扩展的对话系统(附项目源码)

    之前的对话系统因为存在一些错误和原作者不允许我分享,所以被我下架了,而且之前对话系统确实少了一些功能,比如最基本的逐字打印功能,原本来是打算后面补充的。 对话系统在游戏中实现太常见了,所以我又重新去找了一些对话系统的课程进行学习,把实现过程和笔

    2024年02月05日
    浏览(41)
  • UNITY 基础之 实现动态加载网络端、PC端和 ANDROID 端指定路径下的图片的简单方法

    Unity中的一些基础知识点,便于后期查看学习。 本节介绍,如何动态加载网络上,电脑上或者Android手机上指定路径的图片的简单方式,方法不唯一,仅供参考。 1、UnityWebRequest 发起网络请求,DownloadHandlerTexture 作为发起下载图片,解析得到图片 2、下载地址不仅支持网络路径

    2024年02月09日
    浏览(36)
  • [Unity] 实现ScriptableObject数据同步Excel表格(对话系统数据管理,C# ExcelNPOI)

            在制作游戏中需要管理各种各样的项目资源,其中游戏中的剧情文字也是一种需要管理的资源。自己刚开始接触游戏开发的时候,第一次看MStudio里面的对话系统教学,只讲了怎么写脚本同步UI的设置,并没有讲有什么方式去管理这些对话数据,视频里拿的是txt来演

    2024年02月10日
    浏览(53)
  • Unity中URP下的添加雾效支持

    我们使用之前的棋盘格作为测试Shader来添加雾效。 Unity中 URP 下的棋盘格Shader #pragma multi_compile_fog float fogCoord : TEXCOORD2; o.fogCoord = ComputeFogFactor(o.vertexCS.z); col.rgb = MixFog(col,i.fogCoord);

    2024年04月25日
    浏览(32)
  • 最新AI创作系统ChatGPT系统运营源码,支持GPT-4图片对话能力,上传图片并识图理解对话,支持DALL-E3文生图

    SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!本系统使用Nestjs+Vue+Typescript框架技术,持续集成AI能力到本系统。支持OpenAI DALL-E3文生图,支持最新GPT-4多模态模型。持GPT-4图片对话能力(上传图片并识图理解对

    2024年02月01日
    浏览(59)
  • Unity实现简单下雨效果(粒子系统)

    效果: 步骤 1.在场景中创建一个粒子系统,重置粒子系统位置,使其在原点处,然后将transform中的Z改为-1。 2.点开新创建粒子系统的检查器,勾选“渲染器”,将材质选择为Default-Line. 3.勾选碰撞效果,类型改为“世界”,模式改为2D,反弹改为0,生存期损失改为0.1 4.勾选“形

    2024年02月08日
    浏览(40)
  • Unity—对话系统&&GalGame游戏文字对话制作

    每日一句:人间总有一两,填我十万八千梦 目录 对话系统 文本逐字打印功能 GalGame游戏(美少女游戏)文字对话 被触发物体(挂载脚本)下UI,先不激活 public   class   TalkButton  : MonoBehaviour {      public  GameObject tipshow; //提示UI      public  GameObject talkUI; //对话UI     

    2023年04月22日
    浏览(42)
  • 智能AIGC写作系统ChatGPT系统源码+Midjourney绘画+支持GPT-4-Turbo模型+支持GPT-4图片对话

    SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型+国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!

    2024年02月03日
    浏览(50)
  • 【Unity+MySQL】实现简单的注册登录系统

    确保这两个软件都能够在你的计算机上良好地运行。 镜像地址:http://mirrors.sohu.com/mysql/MySQL-8.0/ 下载完成后双击运行msi文件。 Next→ Next→ 选择自定义安装, Next→ 选择安装路径, Next→ Install安装, 安装完成,Finish。 此电脑→计算机→属性, 关于→高级系统设置, 高级→环

    2024年02月05日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包