Unity Fungus插件的对话系统简单使用

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

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

 

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

 

Unity Fungus插件的对话系统简单使用_第1张图片这里我用了一个胶囊体做为玩家,俩个Cube是NPC。这里我们需要通过靠近白色Cube,去开启对话。Unity Fungus插件的对话系统简单使用_第2张图片

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

Unity Fungus插件的对话系统简单使用_第3张图片

 Unity Fungus插件的对话系统简单使用_第4张图片

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

Unity Fungus插件的对话系统简单使用_第5张图片

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

Unity Fungus插件的对话系统简单使用_第6张图片

 Unity Fungus插件的对话系统简单使用_第7张图片

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

选择接受任务:我把代码部分放在Update上就会一直循环选择Unity Fungus插件的对话系统简单使用_第8张图片

 拒绝任务:

Unity Fungus插件的对话系统简单使用_第9张图片

 这里我们开始讲原理。

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

Unity Fungus插件的对话系统简单使用_第10张图片

 

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

 Unity Fungus插件的对话系统简单使用_第11张图片

 Unity Fungus插件的对话系统简单使用_第12张图片

 点击GameStart,编辑对话

 Unity Fungus插件的对话系统简单使用_第13张图片

 Unity Fungus插件的对话系统简单使用_第14张图片

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

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

Unity Fungus插件的对话系统简单使用_第15张图片

 

Unity Fungus插件的对话系统简单使用_第16张图片

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

 Unity Fungus插件的对话系统简单使用_第17张图片

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

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

Unity Fungus插件的对话系统简单使用_第18张图片

 Unity Fungus插件的对话系统简单使用_第19张图片

 

 进行改名分辨NPC1和2

 

 Unity Fungus插件的对话系统简单使用_第20张图片

 Unity Fungus插件的对话系统简单使用_第21张图片

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

Unity Fungus插件的对话系统简单使用_第22张图片

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

Unity Fungus插件的对话系统简单使用_第23张图片

 

Panel:可以改变聊天背景

Unity Fungus插件的对话系统简单使用_第24张图片

 Image:是大蘑菇的图片

Continue:是右下角的图片

Unity Fungus插件的对话系统简单使用_第25张图片

 

Unity Fungus插件的对话系统简单使用_第26张图片

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

Unity Fungus插件的对话系统简单使用_第27张图片

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

Unity Fungus插件的对话系统简单使用_第28张图片

 Unity Fungus插件的对话系统简单使用_第29张图片

 之后我们右键创建新的对话,并重复之前的操作,并把对话给到NPC2Unity Fungus插件的对话系统简单使用_第30张图片

 Unity Fungus插件的对话系统简单使用_第31张图片

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

Unity Fungus插件的对话系统简单使用_第32张图片

 Unity Fungus插件的对话系统简单使用_第33张图片

Unity Fungus插件的对话系统简单使用_第34张图片

 Unity Fungus插件的对话系统简单使用_第35张图片

 在Second里面添加一个if判断

Unity Fungus插件的对话系统简单使用_第36张图片

 Unity Fungus插件的对话系统简单使用_第37张图片

注:对话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();//获取小蘑菇,对话系统
    }
    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

Unity Fungus插件的对话系统简单使用_第38张图片

Unity Fungus插件的对话系统简单使用_第39张图片

 Unity Fungus插件的对话系统简单使用_第40张图片

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

Unity Fungus插件的对话系统简单使用_第41张图片

 Unity Fungus插件的对话系统简单使用_第42张图片

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

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

 Unity Fungus插件的对话系统简单使用_第43张图片

Unity Fungus插件的对话系统简单使用_第44张图片

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

Unity Fungus插件的对话系统简单使用_第45张图片

Unity Fungus插件的对话系统简单使用_第46张图片

 Unity Fungus插件的对话系统简单使用_第47张图片

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

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

Unity Fungus插件的对话系统简单使用_第48张图片

Unity Fungus插件的对话系统简单使用_第49张图片

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

Unity Fungus插件的对话系统简单使用_第50张图片

 Unity Fungus插件的对话系统简单使用_第51张图片

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

Unity Fungus插件的对话系统简单使用_第52张图片

Unity Fungus插件的对话系统简单使用_第53张图片

 Unity Fungus插件的对话系统简单使用_第54张图片

 Unity Fungus插件的对话系统简单使用_第55张图片

 如何判断一下我们选择的是哪个按钮,这里就用到了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对象放入拖到代码上,不然会报错的。

Unity Fungus插件的对话系统简单使用_第56张图片

 选择选项1Unity Fungus插件的对话系统简单使用_第57张图片

 选择选项2

Unity Fungus插件的对话系统简单使用_第58张图片

 

你可能感兴趣的:(unity,游戏引擎)