GuideMgr 引导系统

引导判断

  • 引导的起点并不是开始引导,而是判断是否要进行引导
  • 最基础的,如果引导已完成过就不必再次引导了
    • 虽然很像废话,但别忘了处理引导更新的情况
  • 常见方式
    • 首次进入游戏
    • 首次进入某个场景
    • 解锁功能时
  • 动态判断
    • 根据玩家的“无措值”
      • 基于玩家的状态、历史行为、关卡进度
      • (可能)能维持沉浸感
  • 大更新引导:引导通常是针对新玩家,但在游戏进行大更新时,老玩家面对新内容可能更难以习惯。
    • 老玩家判断:根据账号创建时间?使用账号创建时版本号更科学。

引导行为

  • 从OOP的理念出发,引导像盖在世界的一团雾,像一段剧情中的插曲,像时停时戒子老爷爷的提示。它通常是可以“扔掉”附属品,引导相关的代码应该尽量与其它业务代码解耦。

  • 行为类型举例

    • 播放一段音频(任天堂游戏常用)
    • 摄像头移动、聚焦
    • 弹出一个对话框
    • 完成一次UI点击
  • 行为类型差异很大,我们可以采取工厂模式来进行抽象。

  • 步骤例子

    • GuideId 枚举类型,各个引导(集)的枚举
    • startGuide(GuideId guideId) 开始引导
    • BehaviourType 枚举类型,引导行为类型的枚举
    • BehaviourConfig 引导行为的配置
      • BehaviourType type 引导行为的类型
      • Boolean autoNext 该引导行为完成后是否自动执行下一步
      • ...
    • Map<GuideId, Array<BehaviourConfig>> GuideCfg 游戏中所有引导的配置
      • GuideCfg[guideId] 某个引导集
      • GuideCfg[guideId][guideStep] 某个引导集的引导步骤行为配置
    • GuideBehaviourFactory.getGuideBehaviour(BehaviourConfig behaviourConfig) 根据当前步骤的配置从工厂获取对应的步骤行为
      • IGuideBehaviour 引导行为接口

        • IDo 执行
        • IOnGuideComplete 本条引导完成
        • IOnGuideSkip 本条引导被跳过
        • ...
      • AGuideBehaviour 抽象引导行为类

        • implement IGuideBehaviour 实现引导行为接口
        • Init(BehaviourConfig behaviourConfig) 初始化
        • abstract void OnInit() 子类进行初始化
        • abstract String getBehaviourName() 要求子类填入具体行为名称,方便后续调试
        • ...
      • 子类实现 extend AGuideBehaviour

        • BtnClickBehaviour 按钮点击
        • CameraFocusBehaviour 摄像机聚焦
        • ClipPlayBehaviour 音效播放
        • TalkBehaviour 弹一个对话框
        • ...

跳过引导

  • 引导可以分类为进度推进型引导和非进度推进型引导。

    • 非进度推进型引导:从某个进度点开始引导,经过一系列引导行为后,回到进度点。

    • 进度推进型引导:从某个进度点开始引导,在完成引导行为时,也会同时推进进度。

  • 非进度推进型引导的引导跳过很简单。

  • 进度推进型引导则需要考虑一些情况。

    • 引导过程中修改的数据
      • 获得道具
      • 学习技能
    • 引导过程中的剧情成分
  • 如果不希望玩家错过关键引导,可以尝试分段跳过(?)

引导中断

  • 引导中断:玩家在引导过程中退出游戏

  • 引导中断处理:引导中断后再次进入游戏

    • 需要恢复引导
      • 恢复到引导开头
      • 恢复到引导中断步骤
    • 不需要恢复引导
      • 跳过引导
      • 不跳过引导(之后按原有逻辑进入引导)
  • 不同的游戏存档/数据同步机制,引导中断的处理难度也不同。

  • 基于引导的场景和行为的不同,我们能选择的引导中断处理方式也不同。

  • 基于开发经验,我给出这四种处理方式优先度:跳过引导 > 不跳过引导 > 恢复到引导开头 > 恢复到引导中断步骤

  • ⚠引导恢复碰上引导更新

    • 跳过引导
    • 如果不能跳过引导,那你就享大福了。引导转换?重新引导?
  • 【实际例子,待补充...】

posted @   bakabird1998  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示