引导判断
- 引导的起点并不是开始引导,而是判断是否要进行引导
- 最基础的,如果引导已完成过就不必再次引导了
- 虽然很像废话,但别忘了处理引导更新的情况
- 常见方式
- 首次进入游戏
- 首次进入某个场景
- 解锁功能时
- 动态判断
- 根据玩家的“无措值”
- 基于玩家的状态、历史行为、关卡进度
- (可能)能维持沉浸感
- 根据玩家的“无措值”
- 大更新引导:引导通常是针对新玩家,但在游戏进行大更新时,老玩家面对新内容可能更难以习惯。
- 老玩家判断:根据账号创建时间?使用账号创建时版本号更科学。
引导行为
-
从OOP的理念出发,引导像盖在世界的一团雾,像一段剧情中的插曲,像时停时戒子老爷爷的提示。它通常是可以“扔掉”附属品,引导相关的代码应该尽量与其它业务代码解耦。
-
行为类型举例
- 播放一段音频(任天堂游戏常用)
- 摄像头移动、聚焦
- 弹出一个对话框
- 完成一次UI点击
-
行为类型差异很大,我们可以采取工厂模式来进行抽象。
-
步骤例子
startGuide(guideId)
开始引导GuideCfg[guideId][guideStep]
当前引导步骤GuideBehaviourFactory.getGuideBehabiour(GuideCfg[guideId][guideStep])
根据当前步骤的配置从工厂获取对应的步骤行为-
IGuideBehaviour
引导行为接口IDo
执行IOnGuideComplete
本条引导完成IOnGuideSkip
本条引导被跳过- ...
-
AGuideBehaviour
抽象引导行为类implement IGuideBehaviour
实现引导行为接口Init(GuideConfig guideConfig)
初始化abstract void OnInit()
子类进行初始化abstract String getBehaviourName()
要求子类填入具体行为名称,方便后续调试- ...
-
子类实现
extend AGuideBehaviour
BtnClickBehaviour
按钮点击CameraFocusBehaviour
摄像机聚焦ClipPlayBehaviour
音效播放TalkBehaviour
弹一个对话框- ...
-
跳过引导
-
引导可以分类为进度推进型引导和非进度推进型引导。
-
非进度推进型引导:从某个进度点开始引导,经过一系列引导行为后,回到进度点。
-
进度推进型引导:从某个进度点开始引导,在完成引导行为时,也会同时推进进度。
-
-
非进度推进型引导的引导跳过很简单。
-
进度推进型引导则需要考虑一些情况。
- 引导过程中修改的数据
- 获得道具
- 学习技能
- 引导过程中的剧情成分
- 引导过程中修改的数据
-
如果不希望玩家错过关键引导,可以尝试分段跳过(?)
引导中断
-
引导中断:玩家在引导过程中退出游戏
-
引导中断处理:引导中断后再次进入游戏
- 需要恢复引导
- 恢复到引导开头
- 恢复到引导中断步骤
- 不需要恢复引导
- 跳过引导
- 不跳过引导(之后按原有逻辑进入引导)
- 需要恢复引导
-
不同的游戏存档/数据同步机制,引导中断的处理难度也不同。
-
基于引导的场景和行为的不同,我们能选择的引导中断处理方式也不同。
-
基于开发经验,我给出这四种处理方式优先度:跳过引导 > 不跳过引导 > 恢复到引导开头 > 恢复到引导中断步骤
-
⚠引导恢复碰上引导更新
- 跳过引导
- 如果不能跳过引导,那你就享大福了。引导转换?重新引导?
-
【实际例子,待补充...】