Fungus是Unity免费的一款开源的插件,它可以无代码的实现玩家与NPC之间的对话,对于Fungus这个插件,我今天说一说我对它的看法以及一些简单的运用和简单的代码功能的实现。

这里需要导入Fungus插件,插件导完之后会出现Tools/Fungus

SayDialog模板使用,Menu菜单选项,Character玩家NPC的创建,Flowchart小蘑菇使用。

这里我用了一个胶囊体做为玩家,俩个Cube是NPC。这里我们需要通过靠近白色Cube,去开启对话。

这里我给了白色Cube一个球型碰撞器,玩家只有进入到区域内,才能进行对话。我把它命名为NPC1,另一个是NPC2。

通过鼠标左键点击,去进行对话进行。这里的边框以及字体样式都用到了SayDialog这个东西,去给到使用的模板。待会我会告诉大家如何去改变格式。

这里结束对话,去找到NPC2进行对话,我在这里做了判断,如果不去和白色Cube进行对话是无法和它进行对话的。在和这个NPC2过程中我们会进行选项的选择,这里就涉及到了Menu的使用,

这里对任务进行获取,每一个选项选择都会有不同的结果,如果选择选项一,就是接收任务。会提示接收任务成功。选项二就是拒绝任务,将无法接收任务。

选择接受任务:我把代码部分放在Update上就会一直循环选择

拒绝任务:

这里我们开始讲原理。

我们先创建Flowchart,它是用来管理对话的。创建完之后会出现一个小蘑菇。

点击小蘑菇之后,其他的不用管,点击Open Flowchart Window进入对话管理

点击GameStart,编辑对话

这里默认选项是GameStarted,游戏运行就开始对话。这里我们选择None,如何通过代码去判断对话。

双击+号,弹出一大堆对话框,我们这里简单说我们需要使用到的东西。

这里我们要选择到SetSayDialog模板使用

在Tools/Fungus/Create/SayDialog创建模板。

在Tools/Fungus/Create/Character创建NPC角色,创建两个,一个NPC1,一个NPC2。

进行改名分辨NPC1和2

创建一个Plane,并在上面创建2个Cube,和一个胶囊体

双击打开SayDialog编辑对话框模板

Panel:可以改变聊天背景

Image:是大蘑菇的图片

Continue:是右下角的图片

这里我们就改变一个panel这个背景图片,编辑好之后就可以进入Flowchart,点击SayDialog并把刚刚编辑的SayDialog托给它,这样我们就编辑好了模板。模板下面的操作都会使用这个模板,除非你在编辑一个模板并在下面使用,那么这个模板就会被代替了

选择say对话,并给其选择该对话的NPC。这里我把俩句话都给到NPC1

之后我们右键创建新的对话,并重复之前的操作,并把对话给到NPC2

然后我们给它添加判断条件,点击Variables按一下“+”号再选择Boolean修改名称canTalk。然后选择Variable/SetVariable

在Second里面添加一个if判断

注:对话NPC位置不能弄错,因为用Secend对话的NPC没有经过使用Start对话的NPC是无法执行对话的!!!!

然后我们就给NPC代码,两个NPC(Cube)运用同一个脚本,需修改的是ChatName的名称。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Fungus;/*
*创建者:
*创建时间:
*描述:
*版本:
*/
public class NPC : MonoBehaviour
{public string ChatName;//外面传入要进行的对话名称private bool canTalk=false; //判断当前是否可以判断读取对话private Flowchart f;void Start(){f = GameObject.Find("Flowchart").GetComponent<Flowchart>();//获取小蘑菇,对话系统}void Update(){if (Input.GetKeyDown(KeyCode.E))//按下键盘E开始对话{Say();}}//鼠标点击事件,如果鼠标点击NPC也允许读取动画private void OnMouseDown(){Say();}void Say(){if (canTalk) {if (f.HasBlock(ChatName))//判断对话是否存在{f.ExecuteBlock(ChatName);//执行对话}}}private void OnTriggerEnter(Collider other)//触发器允许对话{canTalk = true;        }private void OnTriggerExit(Collider other){canTalk = false;        }}

所有这里改一下对话的名称,点击对话然后修改BlockName

注:Cube必须添加碰撞器,玩家也要添加,并加刚体

给玩家一个移动的代码,让他进行移动

void Update()
    {
        Vector3 v = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        transform.position += v * 3 * Time.deltaTime;
        Talk();
    }

这里我们给NPC2的对话Second对话,添加俩个Menu选择分支,会弹出俩个选择框。

这里我们如何判断我们选中的是哪个选择框呢,这里的操作和之前的Boolean是一样的。

我这里选择的一个Integer类型的Variables,并把它公开化。

创建俩个对话。点击Menu选择TargetBlack,第一个Menu选择say1,第二个Menu选择say2

这样它就有了分支了,选择不同的选择,结果就不一样了。

如何判断一下我们选择的是哪个按钮,这里就用到了Variables/Integer的Change。

代码如下:

using System.Collections.Generic;
using UnityEngine;
using Fungus;
using UnityEngine.UI;
/*
*创建者:
*创建时间:
*描述:
*版本:
*/
public class Player1 : MonoBehaviour
{public Flowchart fc;public Menu b;public void Talk(){//获取IntegerVariable的值if (fc.GetIntegerVariable("Change")==1){print("去钓鱼");}else if(fc.GetIntegerVariable("Change") == 2){print("不去钓鱼");}}void Update(){Vector3 v = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));transform.position += v * 3 * Time.deltaTime;Talk();}}

注:需要把Flowchart对象放入拖到代码上,不然会报错的。

选择选项1

选择选项2

Unity Fungus插件的对话系统简单使用相关推荐

  1. Unity Recorder 插件录屏--简单小记

    1.通过Unity 的窗口(Window)打开PackageManager 在里面找到Recorder插件并导入插件 2.打开Recorder插件 Window-->General-->R ...

  2. 【Unity学习】关于串口通信插件SerialPortUtilityPro的简单使用个人案例

    [Unity学习]关于串口通信插件SerialPortUtilityPro的简单使用个人案例 前言 需求分析 串口发送数据 串口接收数据并解析 结语 前言 关于插件资源,请去资源商店购买或使用其试用版 ...

  3. Unity Cinemachine插件学习笔记,结合Timeline实现简单场景动画

    Unity Cinemachine插件学习笔记,结合Timeline实现简单场景动画 *版本要求Unity2017.1及以上. 参考资料: [官方] Unity 2017.1正式版发布 [Unity] ...

  4. Unity常见插件汇总

    Unity常见插件汇总 介绍 收集了相关的Unity插件,供大家学习使用,如果用于商业活动,请购买相关版权 插件列表 1. A* Pathfinding Project 一个功能强大并且易于使用的 U ...

  5. Unity 常用插件

    Unity 常用插件 1.NGUI,算是最常用的UI插件了,下载地址:https://download.csdn.net/download/xiaoyaoACi/21028754 2.FingerGe ...

  6. Unity Cinemachine插件学习笔记,实现单目标和多目标之间切换

    Unity Cinemachine插件学习笔记,实现单目标和多目标之间切换 *版本要求Unity2017.1及以上. 参考资料: [官方] Unity 2017.1正式版发布 Cinemachine插 ...

  7. Unity Cinemachine插件学习笔记

    以下都是转载内容,能够比较直观的学习一些基础内容.现在的Cinemachine更新了许多新的功能,但是Cinemachine插件都ExamplesScences,去看一下官方例子和文档来学习更佳 *版 ...

  8. 【unity插件】unity手柄插件Input输入管理插件,兼容各种主流手柄

    unity开发主机游戏的时候,各个手柄的键位是不一样的,导致开发的时候特别不方便,需要对各个平台进行代码兼容,后来找到了一个特别好用的手柄插件,名字叫InControl. 下载地址: Unity As ...

  9. MMD的unity导入插件

    2019独角兽企业重金招聘Python工程师标准>>> 存在一个mmd模型的unity导入插件: 导入了mmd的物理,将模型每个部位通过 custom的joint进行连接,设定物理属 ...

最新文章

  1. 信息系统项目管理师-计算题专题(四)运筹学计算
  2. 第二次结对编程作业——毕设导师智能匹配
  3. boost::statechart模块实现无效转换测试
  4. 如何使用代码创建service contract并实现partner determination
  5. java 读取list文本_【java基础】读取本地文件赋给Bean或list、Map
  6. pytorch中的 nn.ModuleList 和 nn.Sequential
  7. 华为身处“创新者的窘境”,而浑然不觉(转载)
  8. fdfs和springboot的整合
  9. Word文档压缩的方法
  10. jieba分词及词性判断
  11. linux local root exploit,Linux非交互环境下本地提权思路与反思 linux localroot exploit
  12. clover删除多余引导_clover如何删除无用启动项_常见问题解析,clover
  13. Go语言笔记----GoMoudle
  14. php仿淘宝课程设计任务书
  15. Perplexity困惑度解释
  16. A19,A2,A12 字符排序问题!
  17. poj3347——正方形覆盖(区间覆盖)
  18. matlab偏导数方程,[转载]Matlab求解微分方程(2)——偏微分方程的求解
  19. 存款利息python题_c#入门之实现简易存款利息计算器示例
  20. Bing(必应)搜索,为什么用户越来越多?

热门文章

  1. 10个CSS3动画工具
  2. 王叁寿被公安局带走调查、高管自曝公司资产多为空壳?九次方大数据集团回应来了:传言不实!...
  3. HTML标记【编号列表标记】!
  4. Flutter 实现爱心三连动画
  5. 开放下载 | 《2020年行业云原生应用报告指南》正式发布
  6. SpringBoot3【① 基本框架原理+常用注解及其底层+AOP底层原理+yaml和日志框架】
  7. 一共470多例winform 界面特效的源码
  8. 关于gcc与opencv在Ubuntu的应用
  9. 基于WemosD1的智能垃圾桶
  10. 【报告分享】2020餐饮夜间消费与夜宵品类报告-雀巢-美团(附下载)