背景叨叨叨
大学毕业后入坑Cocos游戏开发已经快三年了,参与了两三个游戏的开发,经历过三四次颠覆式的版本迭代,其中涉足最深的莫过于游戏引导框架的设计开发,一路走来踩过许多坑,感觉有必要写一个引导框架设计的系列博客,就叫《从零开始设计游戏引导框架》吧!文章基于Cocos-2dx平台,使用Lua脚本开发,涉及配表和代码编写,有不足之处,望读者们批评指正!
本文是系列文章的第一篇,先从理论层面开始梳理吧!
引导的作用
假如一款全新的游戏上市,新的玩法、新的角色、新的场景摆在玩家面前,玩家一进入游戏而没有被告知玩法,一切的操作都需要玩家自己去摸索,那么这款游戏给人的感觉是“生硬”的,往往这一类游戏很难让玩家接受并耐着性子玩下去。
这时候如果给这个游戏加一个开场引导,交代游戏的背景,引导玩家按照核心玩法点击各个按钮,并告知每一步操作的作用,这样游戏会更能被玩家接受。
有时候,为了引起玩家的兴趣,开场引导中往往会加入更有代入感的剧情,加上华丽的美术特效,让玩家在玩游戏的过程中分泌更多的快乐素(多巴胺)。
至此,引导的作用就知晓了:
- 增加代入感
- 交代核心玩法
引导是分段的
然而游戏不仅只有开场引导,随着游戏进度的深入,玩家会接触越来越多的玩法操作,每个玩法都有其专属的引导。这时一个概念需要被树立:引导是分段的,一段引导对应一个玩法介绍。
拿率土之滨举例子!
进入游戏后,玩家的主城被流寇抢夺,引导人物出来说几句话,然后引导玩家进行点击操作,这是游戏开场引导。
在一系列引导操作后,玩家可以自由操作了。这时玩家点击“演武”按钮进入了演武界面,一个新的引导——演武引导出现了,它会告诉玩家演武功能的基本操作。
从演武界面出来后,玩家进入招募界面,招募引导会告知玩家点指定卡包抽卡。
引导会根据需要,在玩家首次进入某个界面或满足条件时触发,以帮助玩家理解对应玩法。
每一个功能点都可以以一段引导辅助说明。
每段引导分步骤
上面说的引导分段只是从功能层面定义,而引导里具体做什么是需要程序员去定义拆分的,简言之,引导需要分步骤。
以率土的开场引导为例,玩家进入游戏:
- 第1步,流寇部队进攻玩家主城;
- 第2步,流寇将领出现在屏幕上,说一句话;
- 第3步,引导主人公出现,说一句话;
- 第4步,引导玩家点击地图格……
一段引导就是这样一步接一步进行的。当策划提出一个引导需求时,最多只会给出大致流程,至于如何将一段引导拆分成步骤,需要程序员自行梳理。
分步,是一种思维方式,如何合理拆分,让代码更容易维护,是一个日积月累的过程。
引导的触发
引导的触发,是针对一段引导而言,一段引导是交代做什么事情,而触发则是交代什么时候做事。
为了让读者们更容易理解,我们代入一个场景。
场景代入
假设在一个卡牌养成类游戏中,卡牌有等级,可以进阶(每进阶一级,黄色星星会有一颗变成红色),大概像这样:
(蓝色框框:等级,红色框框:星级 或 “阶”)
接下来策划提出要做一个卡牌的进阶引导,已知进阶的条件是:
- 英雄等级达到20级;
- 有其他同名卡牌作为进阶素材;
同名卡牌:名字相同的卡牌。
比如我有两张吕蒙,可以把其中一张吕蒙作为另一张吕蒙进阶材料。
触发点 & 触发条件
场景有了,接下来聊聊引导的触发。
如果说,引导是什么时候,该做什么事。
那么,引导的触发就是什么时候。
但是这个时候包含着两层含义:
- 触发点
- 触发条件
将它代入到之前场景里,就是:在卡牌等级经验达到20级的那个触发点,卡牌满足有同名卡的触发条件,触发卡牌进阶引导。
用英文的方式理解,就是:
- 触发点 = when
- 触发条件 = it is
两者连在一起,就是:When it is …, 触发引导。
触发的多情况判断
前面提到,当卡牌等级达到20级时,如果存在同名卡就触发引导。
那么如果吕蒙卡牌到达20级时,没有同名卡该怎么触发引导呢?
这个时候需要把引导的触发点和触发条件互换一下,也就是当玩家得到一张吕蒙时,如果吕蒙有同名卡且多张吕蒙卡牌中有至少一张卡牌等级达到20级,则引导触发。
简单写为:
1 | 触发点:获得一张卡牌 |
综上,一个引导的触发,需要多情况判断,在设计引导时,只有尽可能细化引导触发的各个因素,才能在后期的开发中尽可能减少BUG的出现。
引导的操作
如果说引导的触发是针对引导分段,那么引导的操作则是针对引导分步,即:每一步做什么事。
操作分类
引导的操作很杂,根据策划的需求,会有不同的形式,比如:
- 点击某个按钮
- 拖动某张卡牌
- 高亮某个区域
- 显示一个立绘对话
- ……
根据操作形式的共性,将其抽象分类如下:
- 点击
- 拖动
- 高亮框
- 对话
定义了分类后,那么问题来了:为什么要将操作分类呢?
因为操作有其共性,有共性就意味着会有相同的代码逻辑,做好分类后方便对操作统一管理。
以点击举例子:
在强制引导点击时,我们知道,玩家只能点击指定的控件,而不能点击控件以外的地方。这时需要做的统一逻辑,就是:在手指点击屏幕的那一刻,判断手指点击的位置,判断是不是按钮区域。是,则不阻挡事件传递;否则,阻挡触摸事件。
然而操作的分类不仅仅局限于上述几类,分类可根据策划的需求做进一步扩展。在偏剧情向的引导中,可能还需增加“剧情”类别,若剧情是有固定形式的展现,还可根据实际情况做进一步分类,如:
- 剧情:多格漫画
- 剧情:镜头拉伸
- 剧情:视频
- ……
所以操作的分类是灵活多变的,具体分类根据需求来定。
操作定义
操作最终还需落实到具体细节,也就是具体做什么事。之前定义了“点击”类别,那么具体点击什么,就需要做具体的定义了。
以之前的“卡牌进阶引导”为例,当触发引导时,引导步骤如下:
1 | 1. NPC说话:“主公,您有一个英雄已经满足进阶条件了,我们现在来看看吧!” |
根据上述操作步骤,对操作定义如下:
1 | // 操作类别定义 |
根据定义,配引导流程表如下(配表后面细讲,这里看个大概即可):
id | 类别 | 操作 | 对话内容 | 说话人 |
---|---|---|---|---|
_id | _type | _action | _text | _role |
H | H | H | D | H |
1 | 1 | 0 | 主公,您有一个英雄已经满足进阶条件了,我们现在来看看吧! | 1 |
2 | 2 | 201 | 0 | |
3 | 2 | 202 | 0 | |
4 | 1 | 0 | 现在请主公将材料卡拖动到消耗框里。 | 1 |
5 | 3 | 301 | 0 | |
6 | 2 | 203 | 0 | |
7 | 1 | 0 | 恭喜主公成功进阶武将! | 1 |
操作参数
假如引导的需求是拖动两张材料卡进行进阶,那么做两次定义就显得冗余了:
1 | !!! 不推荐这样定义 |
因此需要对操作定义进行扩展,给对应操作增加参数配置,原来301的定义就变成了这样:
1 | // 拖动操作定义 |
相应的,引导流程表也需要多加一列:
id | 类别 | 操作 | 操作参数 | 对话内容 | 说话人 |
---|---|---|---|---|---|
_id | _type | _action | _actParam | _text | _role |
H | H | H | H | D | H |
5 | 3 | 301 | 1 | 0 | |
6 | 3 | 301 | 2 | 0 |
上述配表,表示:
1 | 第5步,在进阶面板拖动第1张材料卡到进阶消耗框 |
操作参数扩展
在一些逻辑复杂的引导中,一个操作参数往往不能满足需求,这是将_actParam
参数由配置数字改为配置Json格式的字符串,可支持多参数的配置。
举例如下:
1 | // 点击操作定义 |
引导流程表就变成了这样:
id | 类别 | 操作 | 操作参数 | 对话内容 | 说话人 |
---|---|---|---|---|---|
_id | _type | _action | _actParam | _text | _role |
H | H | H | S | D | H |
1 | 1 | 0 | 0 | 主公,您有一个英雄已经满足进阶条件了,我们现在来看看吧! | 1 |
2 | 2 | 201 | {‘id’:10001,’lv’:20,’moreThan’:2} | 0 | |
3 | 2 | 202 | 0 | 0 | |
4 | 1 | 0 | 0 | 现在请主公将材料卡拖动到消耗框里。 | 1 |
5 | 3 | 301 | {‘index’:1} | 0 | 0 |
6 | 3 | 301 | {‘index’:2} | 0 | 0 |
7 | 2 | 203 | 0 | 0 | |
8 | 1 | 0 | 0 | 恭喜主公成功进阶武将! | 1 |
至此,引导的操作,暂告一段落,若这一块读者们没有看懂,且先放放,后续会做详细讲解。
引导的保存点
在产品里,有这么一句话,叫“你永远不知道你的用户是怎么使用你的产品的”。
游戏也类似,永远不要指望玩家一口气把你写的那一段引导流畅的跑完。在引导过程中,玩家很可能经历:游戏BUG闪退、上课玩游戏被老师抓到等情况,一旦类似的情况发生,引导肯定会中途断掉,而如果玩家再重新上线,看到之前走过的漫长的引导又要重新走一遍时,有很大的概率,玩家是没有耐心继续玩下去的。
更何况,有些操作是不可重复的,比如玩家走引导,用系统送的货币抽卡,如果重新走一遍,很有可能第二次抽卡货币就不够了,这样的异常会导致引导卡死,这无疑会劝退一大波玩家。
因此,保存点这一概念加入到引导中,以抽卡引导为例:
在点击抽卡按钮的那一步操作里,将引导的保存点设置为下一步引导的id,这样下次重新登录后,引导就会从点抽卡按钮之后的那一步开始继续引导了。
这里先简单讲解下概念,后续实操篇会详细讲解。
理论篇收尾
本文理论篇旨在为下一篇配表、编码做一个理论铺垫,防止直接讲解给读者们带来困惑。下一篇为本系列文章的实操篇,主要讲解基本的配表和初步的编码逻辑。考虑到工作因素,笔者写文章频率会较低,更新较慢,还请读者们海涵!