JingFengJi
for me
FRIENDS
llcat

Unity编辑器拓展之二十四:基于Unity Node Editor、ScriptableObject的配置化新手引导系统

2019-02-01

本文主要介绍根据一款Node Editor库开发的新手引导系统
git地址如下:
https://github.com/luis-l/UnityNodeEditorBase

一、旧版新手引导做法

GuideCheckManager负责check各种类型的引导,判断是否达到触发条件,如果达到条件,当前无引导,则直接进行引导,否则存入缓存队列中。

GuideCheckManager注册跟引导有关的消息通知,等收到通知,做一些check工作。

一个大步引导包含多个单线的单步引导,每个单步引导又可有check条件,如果中间某一单步引导未check通过,则打断引导。

缺点:

(1)配置采用CSV,可读性极差

使用CSV作为配置,为了将触发条件也配置化,就必须做一些数据解析的工作,如下图所示:
在这里插入图片描述

然后在程序中定义各种类型trigger的数据解析函数。从CSV中无法很直观的知道这一单步引导具体是引导什么。

填充数据也较为繁琐。

二、基于结点编辑的配置化新手引导系统

(1)基于ScriptableObject、结点编辑的配置

工具截图如下:
在这里插入图片描述

GuideNodeGraph:一个结点树称为一个大步引导

GuideNode:一个结点称为一个单步引导

一个GuideNodeGraph就是一个ScriptableObject文件

一个GuideNodeGraph包含多个Node,连接NextStepGuide-> LastStepGuide,形成结点树。

每个GuideNode,包含一个Input(LastStepGuide,目前无实际作用,只是为了连接结点树,OutPut必与Input连接),三个Output(NextStepGuide、Trigger、Condition)

NextStepGuide:用来存储下一个单步引导结点,如果无下一单步引导结点,则当前引导结点完成时,引导结束。

Trigger:该单步引导结点触发条件,如果有多个Trigger,则只要有一个Trigger Success,则该引导则触发。

Condition:引导条件结点。单步引导结点可包含多个Condition引导条件,只有当多个Condition均成立时,才会引导。

Trigger和Condition均为Node 的子类。

库中ActionTriggerSystem类的setupNodeCreateMenu函数,实现了在NodeEditor中的右键菜单,自行修改可以实现排序,某一类node在前,某一类在后

在这里插入图片描述

根据Guide View界面类型的不同,可以定义多种Guide Node保存数据,一般有对话模式的,以及点击UI模式的,本文主要讲如何使用Node
Editor、ScriptableObject进行配置化,如果项目中不是使用ScriptableObject进行配置存储的话,该方案就不适用了。

可以NodeEditor的优点:
配置引导可读性高,并且不存在配置数据解析逻辑,更改引导内顺序也很方便快捷。

最后感谢作者提供的Node Editor库
git地址如下:
https://github.com/luis-l/UnityNodeEditorBase

以上知识分享,如有错误,欢迎指出,共同学习,共同进步。

NextPost >
Unity Shader编程之一:多颜色条纹背景
CATALOG