基于xNode的可视化节点新手引导解决方案的开发总结
0x0 写在前面
新手引导最重要的一条就是不能卡死,一旦出现卡死,便是致命的问题,导致玩家所有操作无法执行。
当新手引导出现非预期现象,通常时卡死和不触发,需要查找原因,因此需要新手引导功能容易调试。
除此之外,新手引导是架设在所有系统之上的额外系统,需要其他系统提供足够的支持,才能实现新手引导自身的功能。如果新手引导不是在项目的最后接入,由于开发版本的变动,每个版本迭代后,系统之间的流程发生变化,这时候新手引导逻辑也需要变化。
因此新手引导需要做到容易调整和扩展。
总结一下一个好用的新手引导需要同时实现,不卡死,高扩展,易配置,易调整,可调试这些需求。
0x1 新手引导功能的抽象:Trigger和Action
不论使用什么样的具体技术实现新手引导,我们都可以大致将新手引导抽象成两种行为:判断条件和执行具体行动,即Trigger,Condition和Action
Condition:触发的条件判断,满足为True否则为False,游戏内需要实现的条件多种多样,例如玩家等级是否超过10级,金币是否大于100,某ID的物品的数量是否大于10,等等。
Trigger:在执行某个行动前,需要判断当前环境下是否满足行动的条件,满足返则执行Action,不满足,可以一直等待,也可以执行另一个Action
Action:执行引导的具体行为,通常是显示遮罩,也可以是播放音频,打开UI,等等。
例如这样的需求描述:当玩家等级达到10级,并且已经打开了某个界面时,则显示引导遮罩。翻译一下就是
Condtion:玩家等级达到10级并且某界面已打开
Trigger:等待当Condition满足时触发
Action: 显示引导遮罩
因此实现游戏内新手引导功能等价于实现不同的Condition和实现不同的Action。
1.条件判断:
下面是游戏内可能需要用到的具体条件功能描述:
1.玩家等级是否满足某个条件,比如大于3级
2.某个UI是否已经准备完成并且可见
3.整个系统是否返回到了主界面
4.背包中某道具id是否达到了数量
5.其他更复杂的条件,例如角色是否可升星(升星的定义根据不同游戏各不相同,但通常是检测物品和金币以及其他角色自身条件是否均满足条件)
条件判断分为2种行为,阻塞和非阻塞
非阻塞条件:一次性的判断,开始执行判断逻辑时,只判断一次,判断成功或失败后,执行后续逻辑
阻塞条件:等待直到条件被满足,条件如果不满足,则会一直处于判断状态。
多个条件可以组合
以上各种条件通常需要同时判断,例如1和2同时需要被满足。
因此需要实现符合条件的逻辑判断,实现逻辑与和逻辑或,策划通过条件组合配置满足新手引导触发条件的组合逻辑。
2.执行引导的Action
1.显示挖洞遮罩
通常是引导玩家点击,使用Shader显示一个挖洞区域,这也是新手引导最多的行为
2.将战场中的镜头移动并对准某个角色
3.等待服务器返回结果
4.打开某个引导UI
5.等待n秒
6.其他行为
0x1 表格配置的限制
新手引导最常使用的做法是配置表格,通过上述对需求的分析,可以看到一个能容纳所有上述情况的配置表格,设计起来将会非常复杂,主要难点在于:
如何支持配置触发需要的多条件Trigger,包括条件需要用到的参数
如何配置Action及其需要用到的参数
0x1 新手引导实现对比
---- | 配表 | xNode |
---|---|---|
程序上实现难度 | 直接实现引导逻辑,实现成本低 | 需要额外实现节点扩展 |
策划配置难度 | 容易 | 中等 |
配置是否直观 | 表格不直观,运行时调试工具需要额外实现 | 是 |
运行时是否容易Debug | 否,取决于是否有调试工具 | 是 |
是否可扩展 | 很难扩展 | 方便扩展 |
0x2 基于xNode的新手引导扩展
为了克服表格配置带来的这些问题,我们可以借助对xNode的扩展来实现一个可视化的新手引导,这样可以将新手引导的配置和运行过程利用xnode能更直观的显示给配置者。
此外,多数情况下,引导的流程是线性的,从一个(步骤/行为/节点)完成后才进入下一个(步骤/行为/节点)的状态转移过程,这种线性的执行行为很适合用xnode连线表达。
节点功能实现
下面看一下具体需要实现新手引导的节点功能扩展
1.条件判断节点
这个节点实现了Condition和Trigger
节点使用列表保存Condition,即ConditionList。通过点击+号按钮弹出的Menu,为该判断节点添加更多判断条件。
条件内部配置可以支持比较运算符号,用于支持常用的支持大于等于小于的比较需求
通过And和Or配置条件的组合模式
And:所有条件均需要被满足
Or: 任意条件满足
WaitUntilSuccess:
勾选:节点将等待所有条件均满足,才会执行后续节点。
不勾选:节点将只做一次判断,成功执行Exit,否则执行Fail
2.行为节点
1.遮罩节点
这个节点负责显示遮罩逻辑,根据控件定位遮罩挖洞,这个节点根据需要扩展参数,实现项目内不同的需求,但通常都有
遮罩类型:
Rect:方行遮罩
Circle:圆形遮罩
Radius:圆形遮罩半径
其他参数如是否显示遮罩特效等可以根据自己的需求实现
2.完成节点
当新手引导完成时,通过该节点向服务器请求保存完成步骤的功能
3.辅助节点Wait和Log
很简单,分别就是等待n秒和打印log
4.其他节点可以根据不同游戏的引导需求进行扩展
运行时的状态可视化功能
运行状态的可视化功能对新手引导配置逻辑测试验证可以起到很大的帮助,配置人员可以直接观察当前运行状态。
已完成:节点使用绿色的勾表示已执行完成
正在执行:节点使用黄色的闪烁点表示当前正在执行
错误:红色叉表示执行错误
参考资料:
https://aillieo.cn/post/2018-04-22-game-instruction-notes/