目录
1.2 在AssetStore里搜索fungus (插件类)--千万别买收费的错的!
1.3.1 官网给的3个下载链接,unity的果然已经失效了
2.3.1 下方有一些红色感叹号警告,估计是和前面脚本升级有关系,之后再看吧
10.3 如果要写代码,这里要选none, 因为这里优先级更高
11.2 给NPC增加一个判断范围,进入范围+特定操作才可以对话
11.3.2 公共变量chatName1,需要挂上每个NPC自己的 block
12 直接用fungus实现有条件的对话,形成剧情流,不需要脚本
12.2 只能在flowchart下 variables新增判断变量
1 目标用fungus做一个简单的剧情对话游戏
为什么用fungus
- 因为据说免费,
- 而且和unity兼容
1.1 先创建一个新的3D项目
- 因为计划做人物的移动+对话,因此选择3D的
- 选择 built in render pipeline的模式
1.2 fungus是什么
- fungus 真菌,蘑菇
- 一个可基于unity的插件,编辑对话
1.2.1 怎么获得
下面仔细看
1.2 在AssetStore里搜索fungus (插件类)--千万别买收费的错的!
居然收到一个收费的!!
大家不都说fungus是免费的吗? 采蘑菇还TMD要收费吗?
呃,白嫖党有点无耻了。。。
问了AI都说是免费的
1.3 fungus的官网
只好上去官网看看
1.3.1 官网给的3个下载链接,unity的果然已经失效了
那10刀那个fungus是啥??李逵还是李鬼?
我擦。我估计10刀的那个是一个蘑菇的模型什么付费包吧?同名真坑!!!
不能这个10刀的是假的,但是确实是错误的!!!
1.3.2 去github下?
另外2个都是github的地址,试试
这2个应该是fungus开源得代码工程把。。。。
下面是下载链接,这个应该是fungus的插件的安装文件把
1.3.3 阿西ba,github要搞什么2FA 认证登录
- 记住,手机上的github可以直接登录,授权
- 手机上还有1个authenticator 好像还是付费的,暂时免费几天。。。
- 要下载一个github-recovery-codes
- 反正很麻烦
- 总之你得先登录上才能下载
- 如果搞不懂,看我以前写的2FA的
1.3.4 下载fungus版本
下载了这一堆,我还是使用 unity包图标的这个安装文件把,其他的怎么看像整个开发工程呢?
有的还是 master develop 分支这样的git分支工程
2 导入fungus
2.1 双击安装包,启动跳转到unity
2.2 导入import
2.2.1 出现脚本内容版本不兼容了
呃,先选择中间的,尽量少改动文件吧,
2.3 导入成功
看上面那2个文件夹OK了
2.3.1 下方有一些红色感叹号警告,估计是和前面脚本升级有关系,之后再看吧
2.4 fungus官方好像给了很多例子
3 flowchart 文本流动表 /文本流管理器
3.1 创建 flowchart 文本流动表
- flowchart (文本)流动图
- 有点像,行为树的管理器
- 这个就是文本流flow chart 文本流管理器
- 图标前有个蘑菇,
- 从component看,基本像个空物体
3.2 open flowchart window
- 点击组件里的 open flowchart window
- open flowchart window
- 可以拖到下面的game窗口,或者独立显示
3.3 什么是一个 block?
- 一次完整的对话算一个block, 而不是一句
- 一次的概念,大家玩过游戏的都懂
4 block的属性 和 包含的commands
4.1 基础属性,包括触发
- block name
- custion hint : 估计是常驻的提示语句?游戏里也很常见,比如:你要找什么?今天天不错这类
- callers?
- execute on event //触发其执行的事件
- event里包含: gamestart animator collision 等等
- wait fo frames : 按帧数等待,,,,可够快够灵敏的。。。
战斗时不能对话?
4.2 commands
- 对话,
- 判断
- 选择
- 都算是一条条的命令
4.3 各种不同的commands
点+号可以加,可以搜
以前有分层窗口好找,现在只能搜了?
下面是以前的窗口
4.4 每个command都有不同的属性
比如1个say的属性也老多了
4.5 最重要的是 narrative/say
- 最重要的是 narrative/say
5 搭建一个简单得的游戏环境
5.1 场景内容
- 就在系统建的sampleScene里做
- 新建一个大plane,扩大10*10*10 搞成1个大地图
- 新建3个NPC
- 新建1个player
- 给他们分别加不同材质,显得不那么难看
- 调整摄像机,
5.2 给角色,NPC,地面都增加对应的collider
- 角色,NPC,用的胶囊,圆柱都默认自己加了胶囊的碰撞
- 地面也加了一个terrain的
- 给player加一个rigidbody
- 避免胶囊行走摔跤,加限制旋转
6 在flowChart里创建3套NPC对话
6.1 添加对话
点击左上角的+ 即可添加
7 创建角色
7.1 tools / fungus 里进行角色创建
- 还是再 tools / fungus / create /character里创建
- 创建和3个游戏物体NPC对应的3个character
7.2 设置角色的属性
- 角色属性: 名字,头像,外观模型等等
7.3 设置头像/立绘
8 重新修改对话,添加 名字和头像信息
8.1 回到block下面的每一个具体的 say,添加信息
- 回到block下面的每一个具体的 say,添加信息
- 包括npc,立绘等
8.2
9 相关问题处理
9.1 game窗口大小的问题
- 我最开始用的game窗口分辨率还是288*512
- 是当时开发flappy bird的分辨率。
- 我没想到新建项目,居然继承了这个,以后注意
- 之前那个288*512且是竖屏的有显示这个fungus的对话太小了
- 我修改为一个横屏的分辨率就好了
9.2 报错处理
error CS0006: Metadata file 'Library/PackageCache/com.unity.collab-proxy@2.7.1/Lib/Editor/PlasticSCM/log4netPlastic.dll' could not be found
error CS0006: Metadata file 'Library/PackageCache/com.unity.collab-proxy@2.7.1/Lib/Editor/PlasticSCM/Unity.Plastic.Antlr3.Runtime.dll' could not be found
error CS0006: Metadata file 'Library/PackageCache/com.unity.collab-proxy@2.7.1/Lib/Editor/PlasticSCM/Unity.Plastic.Newtonsoft.Json.dll' could not be found
9.2.1 网上查的方案
有的说是需要删除一个失去云服务的包
有的说,重启unity即可
我试了,我的是重启unity可以
10 对话增加不同的弹出条件
10.1 game start 只是一种默认条件
点击这里可以不只是搜索,可以出来树状的条件
10.2 注意很多都可以不写代码
- 比如 UI的 UI相关
- 比如 键盘响应 input/ key相关
- 游戏相关的 触发,碰撞 collision等等
10.3 如果要写代码,这里要选none, 因为这里优先级更高
- 如果要写代码,这里要宣传none,因为这里优先级更高
- 用代码控制,
11 用脚本实现,3D世界的触发式对话
11.1 增加角色player移动脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class playerControl1 : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
//获得一个点击后的,移动向量
//注意,这个移动是依靠键盘的方向键,WASD。不是鼠标或者点击手机屏幕!
Vector3 dir1 = new Vector3(Input.GetAxis("Horizontal"),0,Input.GetAxis("Vertical"));
//如果移动了
if (dir1 !=Vector3.zero)
{
//修改player的位置
transform.position=transform.position+dir1*10*Time.deltaTime;
}
}
}
11.2 给NPC增加一个判断范围,进入范围+特定操作才可以对话
- 给每个NPC多增加一个 sphere collider
- 而且,都要把 is trigger 勾选上,(是为了触发判断,不是为了碰撞!)
- 3个NPC都增加
- 这个作为player进入NPC的反应范围的判断标准
11.3 NPC的脚本
11.3.1 脚本内容
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Fungus;
public class NpcControl1 : MonoBehaviour
{
//NPC的对话列表,需要是C#脚本外界去获得文字内容,而不是脚本里写文本!
public string chatName1;
//需要创建一个状态值,是否允许对话
private bool canChat=false;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if(Input.GetKeyDown(KeyCode.Space))
{
say();
}
}
private void OnMouseDown()
{
say();
}
private void OnTriggerEnter(Collider other)
{
canChat=true;
Debug.Log("player来了");
}
private void OnTriggerExit(Collider other)
{
canChat=false;
Debug.Log("player走了");
}
//新建调用 say block的函数
private void say()
{
if(canChat) //canChat==true
{
//找到对话
//先找到唯一的flowChart对话流控制器
Flowchart flowChart=GameObject.Find("Flowchart").GetComponent<Flowchart>();
//开始播放对话命令
if(flowChart.HasBlock(chatName1))
{
//执行对话
flowChart.ExecuteBlock(chatName1);
}
}
}
}
11.3.2 公共变量chatName1,需要挂上每个NPC自己的 block
- 公共变量chatName1,需要挂上每个NPC自己的 block
- 但是这里只能手动打名字,不能直接选择匹配
11.3.3 黄色警告 怀疑和对话block 带中文有关系
黄色警告 怀疑和对话block 带中文有关系
我是故意加中文的,这样看的明白点
以后最好还是不加中文
可用,但是有些风险
12 直接用fungus实现有条件的对话,形成剧情流,不需要脚本
流程
- step1:新增判断变量
- step2:某npc那增加判断
- step3:其他npc修改变量
12.1 flowChart下的 变量
12.2 只能在flowchart下 variables新增判断变量
- 选择变量类型,bool
- 不勾选,默认是不生效是0
12.3 NPC2修改,根据变量值if判断
- command里添加if
- 变量选择canTalk
12.4 NPC1修改,修改变量
- 对话说完以后
- command里选择 set variable
13 用fungus实现分支剧情
13.1 command里找到menu
13.2 添加新的分支 say block
13.3 进行关联
13.4 添加关联后
13.5 测试OK
14 自己修改fungus的控件
自己可以修改后自定义
14.1 fungus的对话框的位置
可以修改为符合自己游戏风格的对话框