业务范围

【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手

发布日期:2024-07-22 06:04    点击次数:59

图片

🎬 博客主页:https://xiaoy.blog.csdn.net

🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉

🎄 学习专栏推荐:Unity系统学习专栏

🌲 游戏制作专栏推荐:游戏制作

🌲Unity实战100例专栏推荐:Unity 实战100例 教程

🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

📆 未来很长,值得我们全力奔赴更美好的生活✨

------------------❤️分割线❤️-------------------------

图片

图片

图片

图片

前言

今天带来的是Unity中一款简单易用的对话插件Fungus,它是一个免费的交互式的对话系统。

Fungus是Unity免费的一款开源的插件,它可以无代码的实现玩家与NPC之间的对话,并且支持本地化,对相机、Sprite及音乐音效的控制。

学会使用该插件就可以做一些对话剧情类的游戏了,还是非常好用的,下面就来学习一下Fungus具体怎么使用吧!

【Unity 实用插件篇】| 使用Fungus插件制作一个对话系统,简单好学易上手一、Fungus介绍

Fungus 的目标是提供一个免费的开源工具,用于在Unity 3D中创建交互式故事游戏。Fungus被设计为易于学习初学者Unity 3D,特别是对于没有编码经验的人。

对于高级用户,它为可视化脚本和交互式故事叙述提供了直观、快速的工作流。Fungus被用来创造视觉小说、点击冒险游戏、儿童故事、隐藏对象游戏、电子学习应用以及一些难以分类的奇怪东西。

Fungus 允许通过直观的可视化脚本系统轻松地将讲故事功能添加到 Unity 游戏中,无需编码。

适合制作视觉小说、角色扮演游戏、隐藏物品、益智游戏和互动小说游戏。

基于流程图的人物对话

角色对话的国际化。

轻松控制精灵、摄像机和音频,帮助讲述您的故事

适用于 2D 和 3D Unity 游戏

与其他 Unity 代码轻松集成且易于扩展。

为更有经验的用户提供强大的 Lua 脚本支持

100% 免费和开源

Fungus官方地址:Fungus Fungus官方使用文档:Documentation

插件下载方式:

GitHub下载:github下载地址

CSDN资源下载:Unity-Fungus对话插件

VX搜我名字,回复【素材资源】免费获取

在Unity Assets Store下载导入(目前资源包已下架,之前买过的可以继续使用):Fungus

二、Fumgus导入

从上面的几种下载方式将该插件下载到本地之后,将资源包复制到我们的Unity项目即可。

有几种导入形式,分别来简单介绍一下:

如果下载的插件是.unitypackage后缀结尾的文件,那就直接将该文件拖到Unity项目的Preject窗口即可导入。

图片

如果是从github下载的则是一整个文件目录,此时有两种方案可以选择。

图片

(a)使用UnityHub加载这个文件夹,直接打开一个该项目在此基础上开发使用。 (b)在下载的文件中复制Fungus这个文件夹,将文件夹复制到Unity项目中,如下图:

图片

导入后可以在菜单栏中看到一个Tool菜单,说明Fungus插件导入成功,下面就可以学习具体怎样使用该插件了。

图片

三、Fungus功能使用3.1 基础对话效果实现

新建一个空场景,然后点击菜单栏Tools -> Fungus -> Creat -> FlowChat,如图所示:

图片

此时场景中会多出一个Flowchat游戏对象,点击该对象。

点击Fungus脚本的 Open Flowchat Window 打开对话管理窗口。

图片

然后打开的窗口中会出现一个New Block,此时点击该Block查看Inspector监视器窗口。

图片

点击’+',找到 Narrative/Say 进行点击。

图片

Say就是实现对话内容的地方,我们可以点击该Commands输入对话内容,也可以添加多项内容,如下所示:

图片

此时可以运行项目查看效果:

图片

这个时候最基础的对话效果就已经实现了,我们通过调整上述Block中的内容就可以添加各种对话。

此处添加Say的地方不止可以实现对话效果,包括添加音乐、动画、位置等各种操作,这个我们后面用到再详细介绍。

默认是游戏第一帧就会运行,我们可以手动添加其他条件触发,比如加个Button点击触发对话。

图片

图片

实现更加复杂的效果需要继续往下看。

3.2 搭建简单场景测试

在场景中简单搭建一个界面方便菜测试使用,如新建一个游戏对象当做玩家,然后再创建两个游戏对象当做npc对话使用。

图片

并新建一个脚本PlayerController.cs,添加一个简单的玩家移动旋转的功能。 代码如下:

using UnityEngine;public class PlayerController : MonoBehaviour{[Header("移动速度")]public float movespeed = 5f;[Header("转身速度")]public float turnspeed = 2f;private float hor, ver;void Update(){hor = Input.GetAxis("Horizontal");ver = Input.GetAxis("Vertical");//前后移动transform.position += ver * transform.forward * Time.deltaTime * movespeed;//左右转身transform.eulerAngles += hor * Vector3.up * turnspeed;}}

在玩家对象身上添加刚体组件Rigidbody,把参数简单修改一下,防止玩家胶囊体歪在路上了~

图片

3.3 触碰 对话

上面讲了怎样触发一个最简单的对话,下面就来添加一个当玩家靠近相关npc时触发对话弹窗的步骤。

首先我们给npc1添加一个球形触发器,用于检测玩家是否进入其触发范围。

图片

将玩家Player对象添加Tag为Player,全局唯一 方便检测是否为玩家。

然后再新建一个脚本NpcEntity.cs,用于挂载到Npc身上添加一些与玩家相关的逻辑。 代码如下:

using Fungus;using UnityEngine;public class NpcEntity : MonoBehaviour{[Header("npc名字,需与Block名字一致")]public string npcName;private Flowchart flowchart;private bool canSay;void Start(){flowchart = GameObject.Find("Flowchart").GetComponent<Flowchart>();}private void Update(){//鼠标按下左键触发对话方法if (Input.GetMouseButtonDown(0)){Say();}}void Say(){if (canSay){if (flowchart.HasBlock(npcName)){flowchart.ExecuteBlock(npcName);}}}private void OnTriggerEnter(Collider other){//如果检测到玩家进入触发范围if (other.tag.Equals("Player")){canSay = true;}}private void OnTriggerExit(Collider other){//如果检测到玩家离开触发范围if (other.tag.Equals("Player")){canSay = false;} }}

将脚本挂载到场景的Npc1上,并且在对话窗口管理器中将第一个Block改名为npc1,如图:

图片

Block的名字很重要,每一个Block都代表一个对话流程,且全局唯一不重复。

此时运行游戏查看效果:

图片

可以看到只有玩家进入npc1的触发范围点击鼠标左键才会触发对话,在触发器范围之外是不会触发对话的。

这样就完成了一个简单的触发对话功能。

3.4 条件对话

有的时候我们与某个npc对话时,还会有前提条件。比如在跟npc2对话之前,必须与npc1对话完才可以跟npc2对话。

下面来看一下这个效果怎样实现吧。

首先在场景中给npc2也添加上NpcEntity脚本,并将Name改为npc2,同时别忘记添加触发器。

图片

然后在对话管理器窗口中右键场创建新的Block并命名为npc2,然后点击’+'添加一个Say对话。

图片

此时在对话管理器窗口中点击Variables添加一个布尔值变量并改个名字,这个参数我们将用来判断玩家是否与npc1对话过。

图片

然后点击npc2的Block,在右侧面板上加一个if选项。

图片

然后点击新加的if对话,将我们刚才创建的布尔变量添加上,如图所示:

图片

然后还要在npc1的Block对话末尾加一个Set Variable,将我们添加的布尔变量改为true。

图片

此处的含义就是与npc2对话前要进行判断,当我们加的这个条件(此处条件为我们创建的布尔变量’End_npc1’)满足时,才可以与npc2进行后续的对话。所以与npc1对话后要将该值改为true。

这也是本小节开头说的 前提条件,下面运行看一下效果。

图片

3.4 分支 对话

在生活中我们会经常面临着各种选择,比如著名的每日三省吾身:早饭吃什么?午饭吃什么?晚饭吃什么? 那游戏中也如此,总会遇到一些让我们选择的问题,那这个需要进行选择的分支对话要怎么做呢,继续看下面的操作。

在npc2的Block中继续添加节点Menu,添加两个Menu作为对话分支的内容。如下所示:

图片

图片

可以看到目前Menu命令里面是报错状态,提示我们没有指定目标Block,这里就需要在对话管理器窗口中右键新建两个Block作为此次分支对话的目标节点,如下所示:

图片

将两个Menu的TargetBlock分别指向新建的两个Block上,可以看到左侧的npc2的Block也发生了变化,有两个箭头分别指向了后面的npc2_1和npc2_2。

然后我们在后续的两个分支上分别添加一个对话,以达到一个连续对话的功能。

图片

然后在npc2的末尾添加一个Set Variable,此处将之前加的布尔值参数End_npc1改为Fasle,防止触发分支对话后又重新触发npc2的初始对话。

图片

此时运行查看效果:

图片

3.5 改变对话UI视图

此时我们已经可以给对话添加触发条件和分支对话了,已经算是学会了剧情对话中最常用的功能啦~

但是此时的对话没有名字和肖像图,以至于不知道哪句话分别是谁说的,傻傻分不清楚。

不用担心,Fungus也是提供了此功能让我们可以使用,下面请看具体用法。

点击菜单栏Tools -> Create -> Character,新建两个Character,分别命名为Character_npc1和Character_npc2。

图片

选中这两个Character_npc对象,在其对应的脚本中改一下对应的名字和颜色。

图片

记得还要再加一个Character_player代表玩家。

图片

然后我们在对话管理中找到对话流程,并给每个对话指令添加对应的Character对象。

图片

此时运行工程,查看具体效果,可以看到对话的上面已经显示是谁在讲话了。

图片

在Character_npc对象上我们也可以添加对应角色的肖像图,如下:

图片

添加的图片格式为Sprite,可以添加多个肖像图,在具体的对话Block中可选择具体使用哪一张。

图片

此时再运行工程,可查看添加完肖像图的对话流程。

图片

同样的,不同角色的对话气泡框也可以单独设置。还是找到Character_npc对象身上的Character脚本,有个参数叫Set Say Dialog,单独设置每个Character_npc的该参数就可以实现不同角色不同的对话框气泡了!

如果想直接改变全局的对话框气泡样式,可以找到全局的预制体SayDialog,直接修改此预制体的样式即可修改全局使用的气泡样式。

图片

四、常用功能菜单介绍4.1 Flowchat 窗口

Flowchat 窗口 是我们通过点击 Flowchart游戏对象 身上的 Flowchart脚本 的Open Flowchart Window参数调出来的。

图片

其作用就是负责整个对话管理器的窗口,在其中可以看到和管理各个Block。4.2 Block Inspector面板

首先是Flowchat窗口的Block Inspector的参数介绍。

图片

名称介绍Block Name按钮在Flowchartwindow里的名字Custom Tint开启个性化设置,可以自己设置按钮的样式Description类似于备注,会显示在按钮下方execute on event此节点是通过什么事件触发,如在游戏开始时直接触发、按下某个按键触发等Commands节点触发后按顺序执行4.2 节点Say参数

然后是节点中的Say参数介绍。

图片

名称介绍Character将对话框绑定到某个角色Story Text游戏运行后对话框中显示的内容Voice Over Clip设置对话框出现时伴随的音效Tag Help点击后展示一些可以在story text中使用的样式,如加粗、斜体、改变字体颜色等Show Always该对话指令是否一直都展示。若改为False则可以设置出现的具体次数Show CountFade When Done完成时淡入淡出效果Wait For Click是否等待点击。若改为False,怎对话完成后会自动切换下一句话而无需玩家点击Set Say Dialog设置对话气泡框。可以改变对话的气泡样式

关于Fungus的每个节点都有不同的参数属性,这里就不一一介绍了,想了解更多参数及使用方法可以参考官方提供的说明文档学习使用。

总结

本文介绍了Unity中一个简单易用的 对话插件Fungus,学会该插件就可以制作一些小型的剧情对话游戏啦!

由于篇幅原因本文介绍了Fungus中常用的几个功能,还有很多其他功能可以参考官方提供的文档使用。

资料白嫖,技术互助

学习路线指引(点击解锁)知识定位人群定位🧡 Unity系统学习专栏 🧡入门级本专栏从Unity入门开始学习,快速达到Unity的入门水平💛 Unity实战类项目 💛进阶级计划制作Unity的 100个实战案例!助你进入Unity世界,争取做最全的Unity原创博客大全。❤️ 游戏制作专栏 ❤️ 难度偏高分享学习一些Unity成品的游戏Demo和其他语言的小游戏!💚 游戏爱好者万人社区💚 互助/吹水数万人游戏爱好者社区,聊天互助,白嫖奖品💙 Unity100个实用技能💙 Unity查漏补缺针对一些Unity中经常用到的一些小知识和技能进行学习介绍,核心目的就是让我们能够快速学习Unity的知识以达到查漏补缺

图片

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。

上一篇:7月10日玉米期货收盘下跌0.98%,报2420元
下一篇:王炸组合!网站+软件