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

请添加图片描述

      • 前言
  • 【Unity 实用插件篇】| 使用Fungus插件制作一个对话系统,简单好学易上手
    • 一、Fungus介绍
    • 二、Fumgus导入
    • 三、Fungus功能使用
      • 3.1 基础对话效果实现
      • 3.2 搭建简单场景测试
      • 3.3 触碰 对话
      • 3.4 条件对话
      • 3.4 分支 对话
      • 3.5 改变对话UI视图
    • 四、常用功能菜单介绍
      • 4.1 Flowchat 窗口
      • 4.2 Block Inspector面板
      • 4.2 节点Say参数
  • 总结

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

  • 博客主页: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

插件下载方式

  1. GitHub下载:github下载地址
  2. CSDN资源下载:Unity-Fungus对话插件
  3. VX搜我名字,回复【素材资源】免费获取
  4. 在Unity Assets Store下载导入(目前资源包已下架,之前买过的可以继续使用):Fungus

二、Fumgus导入

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

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

  1. 如果下载的插件是.unitypackage后缀结尾的文件,那就直接将该文件拖到Unity项目的Preject窗口即可导入。
    【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第2张图片

  2. 如果是从github下载的则是一整个文件目录,此时有两种方案可以选择。
    【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第3张图片

(a)使用UnityHub加载这个文件夹,直接打开一个该项目在此基础上开发使用。
(b)在下载的文件中复制Fungus这个文件夹,将文件夹复制到Unity项目中,如下图:
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第4张图片

导入后可以在菜单栏中看到一个Tool菜单,说明Fungus插件导入成功,下面就可以学习具体怎样使用该插件了。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第5张图片


三、Fungus功能使用

3.1 基础对话效果实现

新建一个空场景,然后点击菜单栏Tools -> Fungus -> Creat -> FlowChat,如图所示:
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第6张图片

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

点击Fungus脚本的 Open Flowchat Window 打开对话管理窗口。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第7张图片

然后打开的窗口中会出现一个New Block,此时点击该Block查看Inspector监视器窗口。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第8张图片

点击’+',找到 Narrative/Say 进行点击。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第9张图片

Say就是实现对话内容的地方,我们可以点击该Commands输入对话内容,也可以添加多项内容,如下所示:
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第10张图片

此时可以运行项目查看效果:
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第11张图片

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

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

默认是游戏第一帧就会运行,我们可以手动添加其他条件触发,比如加个Button点击触发对话。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第12张图片
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第13张图片

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

3.2 搭建简单场景测试

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

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

并新建一个脚本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,把参数简单修改一下,防止玩家胶囊体歪在路上了~
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第15张图片

3.3 触碰 对话

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

首先我们给npc1添加一个球形触发器,用于检测玩家是否进入其触发范围。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第16张图片

将玩家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,如图:
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第17张图片

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

此时运行游戏查看效果:
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第18张图片
可以看到只有玩家进入npc1的触发范围点击鼠标左键才会触发对话,在触发器范围之外是不会触发对话的。

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

3.4 条件对话

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

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

首先在场景中给npc2也添加上NpcEntity脚本,并将Name改为npc2,同时别忘记添加触发器。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第19张图片

然后在对话管理器窗口中右键场创建新的Block并命名为npc2,然后点击’+'添加一个Say对话。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第20张图片

此时在对话管理器窗口中点击Variables添加一个布尔值变量并改个名字,这个参数我们将用来判断玩家是否与npc1对话过。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第21张图片

然后点击npc2的Block,在右侧面板上加一个if选项。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第22张图片

然后点击新加的if对话,将我们刚才创建的布尔变量添加上,如图所示:
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第23张图片

然后还要在npc1的Block对话末尾加一个Set Variable,将我们添加的布尔变量改为true。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第24张图片

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

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

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

3.4 分支 对话

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

在npc2的Block中继续添加节点Menu,添加两个Menu作为对话分支的内容。如下所示:
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第26张图片
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第27张图片

可以看到目前Menu命令里面是报错状态,提示我们没有指定目标Block,这里就需要在对话管理器窗口中右键新建两个Block作为此次分支对话的目标节点,如下所示:
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第28张图片

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

然后我们在后续的两个分支上分别添加一个对话,以达到一个连续对话的功能。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第29张图片

然后在npc2的末尾添加一个Set Variable,此处将之前加的布尔值参数End_npc1改为Fasle,防止触发分支对话后又重新触发npc2的初始对话。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第30张图片

此时运行查看效果:
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第31张图片

3.5 改变对话UI视图

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

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

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

点击菜单栏Tools -> Create -> Character,新建两个Character,分别命名为Character_npc1Character_npc2
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第32张图片

选中这两个Character_npc对象,在其对应的脚本中改一下对应的名字和颜色。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第33张图片

记得还要再加一个Character_player代表玩家。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第34张图片

然后我们在对话管理中找到对话流程,并给每个对话指令添加对应的Character对象。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第35张图片

此时运行工程,查看具体效果,可以看到对话的上面已经显示是谁在讲话了。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第36张图片

在Character_npc对象上我们也可以添加对应角色的肖像图,如下:
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第37张图片
添加的图片格式为Sprite,可以添加多个肖像图,在具体的对话Block中可选择具体使用哪一张。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第38张图片

此时再运行工程,可查看添加完肖像图的对话流程。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第39张图片

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

如果想直接改变全局的对话框气泡样式,可以找到全局的预制体SayDialog,直接修改此预制体的样式即可修改全局使用的气泡样式。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第40张图片


四、常用功能菜单介绍

4.1 Flowchat 窗口

Flowchat 窗口 是我们通过点击 Flowchart游戏对象 身上的 Flowchart脚本 的Open Flowchart Window参数调出来的。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第41张图片
其作用就是负责整个对话管理器的窗口,在其中可以看到和管理各个Block。

4.2 Block Inspector面板

首先是Flowchat窗口的Block Inspector的参数介绍。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第42张图片

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

4.2 节点Say参数

然后是节点中的Say参数介绍。
【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手_第43张图片

名称 介绍
Character 将对话框绑定到某个角色
Story Text 游戏运行后对话框中显示的内容
Voice Over Clip 设置对话框出现时伴随的音效
Tag Help 点击后展示一些可以在story text中使用的样式,如加粗、斜体、改变字体颜色等
Show Always 该对话指令是否一直都展示。若改为False则可以设置出现的具体次数Show Count
Fade 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的知识以达到查漏补缺

在这里插入图片描述

你可能感兴趣的:(Unity,实用插件集合篇,unity,游戏引擎,fungus,对话系统,剧情对话)