前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手

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

作者头像
呆呆敲代码的小Y
发布于 2023-07-24 09:09:17
发布于 2023-07-24 09:09:17
8.6K04
代码可运行
举报
运行总次数:4
代码可运行

前言

  • 今天带来的是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窗口即可导入。
  1. 如果是从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,添加一个简单的玩家移动旋转的功能。 代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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身上添加一些与玩家相关的逻辑。 代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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_npc1Character_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 Count

Fade When Done

完成时淡入淡出效果

Wait For Click

是否等待点击。若改为False,怎对话完成后会自动切换下一句话而无需玩家点击

Set Say Dialog

设置对话气泡框。可以改变对话的气泡样式

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


总结

  • 本文介绍了Unity中一个简单易用的 对话插件Fungus,学会该插件就可以制作一些小型的剧情对话游戏啦!
  • 由于篇幅原因本文介绍了Fungus中常用的几个功能,还有很多其他功能可以参考官方提供的文档使用。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一键完成对话需求?这款插件你不能错过(Unity3D)
Dialogue System是一个分支式的统一会话系统。它不需要任何脚本,但它是设计为易于由程序员扩展。
恬静的小魔龙
2022/08/07
4.9K0
一键完成对话需求?这款插件你不能错过(Unity3D)
Unity OpenVR 虚拟现实入门二:一个最简单的虚拟现实游戏/程序
在 Unity 的帮助下,虚拟现实应用的开发非常容易。不过国内竟然还是没有什么教程,所以这里就来一点入门的,适合新手。
walterlv
2023/10/22
5380
Unity OpenVR 虚拟现实入门二:一个最简单的虚拟现实游戏/程序
Unity 实用插件篇 | Tutorial Master 2 游戏引导教程 快速上手
一开始,制作一个简单的“操作指南”截图似乎是可行的方法,但对于具有深度机制的游戏来说,这并不总是最佳解决方案。如果你不能教会他们如何玩你的游戏,你就有可能失去潜在的长期玩家。
呆呆敲代码的小Y
2023/07/24
2K0
Unity 实用插件篇 | Tutorial Master 2 游戏引导教程 快速上手
游戏服务器设计之NPC系统
游戏服务器设计之NPC系统 简介 NPC系统是游戏中非常重要的系统,设计的好坏很大程度上影响游戏的体验。NPC在游戏中有如下作用: 引导玩家体验游戏内容,一般游戏内有很多主线、支线任务,而任务的介绍、接取、领取奖励等操作都是通过NPC的操作,一般会有几个核心NPC,再不停的任务引导中,玩家会对核心npc印象深刻,强化了游戏代入感。 核心功能的展示和操作。游戏大部分功能都会放到游戏主界面,但是全部功能都放进去是不现实的,其他功能则以NPC的方式提供,比如进入某副本的入口等。 一些运营活动,比如道具秒杀,打折促
知然
2018/03/09
2.7K0
游戏服务器设计之NPC系统
【Unity技能】做一个简单的NPC
前几天我看到cgcookie一个教程。学习了下怎么依据已有人物模型制作一个仿版的NPC人物。感觉挺好玩的,整理一下放到博客里!
全栈程序员站长
2022/07/05
8240
【Unity技能】做一个简单的NPC
Unity-BattleStar丨7. 最简单的游戏AI:NavMesh寻路系统___Robot篇
资源文件已为我们制作好了FPSController第一人称目标角色,即玩家角色,我们可以通过键盘控制人物移动,观察Robot互动效果。本章我们要完成的目标就是从寻路开始给机器人设置与玩家之间的互动效果
星河造梦坊官方
2024/08/14
970
Unity-BattleStar丨7. 最简单的游戏AI:NavMesh寻路系统___Robot篇
开发游戏时如何操控 游戏打击感?利用好Feel插件可快速提升游戏感
说简单点就是Feel 插件 可以让我们的游戏增加游戏感,所以我们才要来学习Feel的使用啦!
呆呆敲代码的小Y
2023/03/09
1.8K0
开发游戏时如何操控 游戏打击感?利用好Feel插件可快速提升游戏感
不写代码能做游戏?使用Unity Bolt插件
最近在玩 Unity,一个主流的游戏引擎,同类的产品还有 Unreal(虚幻引擎),而虚幻引擎里面有一个特别好用的功能:蓝图。
玖柒的小窝
2021/10/09
1.4K0
不写代码能做游戏?使用Unity Bolt插件
ECS(Entitas) For Unity #1
Entitas-RTS-Template:传送门 ECS博主:传送门 其主要博客:传送门 另一篇博客:传送门 ECS教程视频:传送门,视频下方简介有工程文件 最好不要在没有任何自己编写的文件时以及在其他任何非必要点击节点进行enny->Preference的核按钮点击。 CookBook:传送门 (不确定会不会有#2) ---- 目录 前言 安装 环境基础 安装 00.ECS概念 01.简要介绍 实体(Entity) 上下文(Context) 组(Group) 收集器(Collector) 匹配器(Gam
[Sugar]
2022/09/21
9.8K0
构建互动叙事:在Unity中打造简易对话系统
新建脚本“DialoguePanel.cs”挂载到组件“DialoguePanel”面板上 获取组件、文件
90后小陈老师
2025/02/05
2200
构建互动叙事:在Unity中打造简易对话系统
如何用python制作3d游戏_【教程】12个步骤让你快速学会制作3D游戏
Unity3D不仅是一款功能强大且易于上手的游戏引擎,更重要的是,它还可以被免费下载(它还有一个功能更强大的付费版,但其实你可以使用免费版本完成绝大部分工作)。
全栈程序员站长
2022/09/02
3.7K0
Unity入门教程(下)
一、概要 在 Unity入门教程(上) 中我们创建了一个游戏项目,并且创建了玩家角色和小球这些游戏对象,还通过添加游戏脚本实现了小方块的弹跳。虽然功能比较简单,但是完整地表现了使用Unity开发游戏的大体流程。 为了让这个游戏变得更加有趣,下面我们要进一步完善玩家角色和小球的动作。 二、让小球飞起来(物理运动和速度) 目前小球是静止在空中的,下面我们来尝试让它朝玩家角色飞去。 为了令小球能够模拟物理运动,需要添加Rigidbody组件。同时还需要创建一个Ball的脚本。此操作在Unity入门教程(上)中的步
Zoctopus
2018/06/04
3.4K3
Unity-BattleStar丨9. BattleStar实战:给游戏添加物理系统
我们发现,在Hierarchy里面有GameOverPosition,它代表着我们到达该地,将取得游戏胜利。我们添加自动寻路脚本,观察在迷宫中如何到达目的地。我们先将FPSController设置为NavMesh Agent,自动寻路到该位置看看实际效果。
星河造梦坊官方
2024/08/14
1360
Unity-BattleStar丨9. BattleStar实战:给游戏添加物理系统
【Unity实战篇 】| 如何在小游戏中快速接入一个新手引导教程
游戏结构很简单,主要由三个场景组成,我们的引导教程主要是在第一个场景Start中制作添加。
呆呆敲代码的小Y
2023/08/18
1.3K0
【Unity实战篇 】| 如何在小游戏中快速接入一个新手引导教程
unity3d怎么挖坑_unity游戏教程
1、rigidbody.addforce(Vector3 * speed) (见roll-a-ball)
全栈程序员站长
2022/09/29
3K0
unity3d怎么挖坑_unity游戏教程
Unity3D 入门:最简单的控制视角,以及控制角色前进、转向的脚本
本文依然是 Unity3D 的入门篇。作为 Unity3D 的入门读者,你可能希望迅速让你能在游戏中操作你的视角,或者让角色移动。
walterlv
2023/10/22
2K0
Unity3D 入门:最简单的控制视角,以及控制角色前进、转向的脚本
【Unity】近期的一些小笔记
这段时间也是发生了不少事情,借疫情的机会我也杂糅着学了不少Unity的东西,越是保持着我之前的“用到不懂再查”的心态,就越是感受到知识缺乏体系的局限性。于是这里把最近的一些小笔记总结起来,然后我一方面是我要来搞论文的事情,另一方面也是希望自己尽量系统点学习这些东西,所以这篇以后可能又要安静一段吧。
ZifengHuang
2020/07/29
1.6K0
【Unity】近期的一些小笔记
Unity入门教程(上)
一、介绍 目的:通过尝试制作一款使用玩家角色把小球弹飞的简单小游戏,熟悉使用Unity进行游戏开发的基本流程。 软件环境:Unity 2017.3.0f3,Visual Studio 2013 二、创建新项目 1,启动Unity后将出现一个并列显示Projects和Getting started的窗口。点击窗口中央的New Project按钮或者右上方的NEW文本标签,窗口下半部分内容将发生改变,出现Project Name文本框等内容。 2,如果Unity曾经被启动过(比如我),窗口中央将不再显示New
Zoctopus
2018/06/04
3.5K0
想要制作沙盒游戏?那么这一款插件你一定不能错过(Unity3D)
VOXL是一款简单且易于理解的多重体素沙盒游戏,使用Unity的UNET网络系统开发。
恬静的小魔龙
2022/08/07
2K0
想要制作沙盒游戏?那么这一款插件你一定不能错过(Unity3D)
unity和android的项目交互
由于近期工作要求需要给实现unity5.6.5上打包android的项目,个人算是研究一天左右,才完成这个工作,将自己遇到的坑和一些学习操作的过程,总结一下与大家分享。
包子388321
2020/06/16
2.3K0
推荐阅读
相关推荐
一键完成对话需求?这款插件你不能错过(Unity3D)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档