背景:编写、维护测试用例是测试人员日常工作中不可或缺的一部分。用例的编写方式多种多样,不同游戏类型,不同需求的用例在编写方式和最终呈现上或多或少都有一些差异。当笔者根据mmorpg的用例经验,给动作角色扮演游戏的关卡编写测试用例,却发现无法清晰准确地表达出来的时候,我知道是时候尝试一种新的更适合实际情况的用例设计方法了。
本文将以笔者所在的动作角色扮演游戏项目为例,尝试从关卡动线入手,拆分关卡中的各类元素,探索一种对关卡测试更友好的用例设计方法。考虑到项目目前的开发阶段和保密性要求,没有办法直接给出项目中的真实例子,还请大家见谅。
01 游戏特点
由于不同类型的游戏之间存在差异,所以需要先花一点篇幅给大家简单介绍一下动作角色扮演游戏的特点。
1.游戏类型
动作角色扮演游戏(Action Role-Playing Game,以下简称ARPG)包含动作游戏、角色扮演游戏和冒险游戏的要素,既具备角色不断成长以应对不同难关的RPG要素,又包含动作性处理、动态战斗的动作游戏要素,还包含解决难题、解开机关的冒险游戏要素。
ARPG游戏的模式
ARPG在发展过程中又逐渐分化出三个子类型:
(1)剧情型
这种类型实际上和传统的RPG游戏非常类似,可以说就是把传统角色扮演游戏的战斗系统完全用动作游戏的战斗系统取而代之,其他方面保留不变,着重于描述一个丰富曲折且具有一定深度的故事,玩家游玩的主要体验就是参与推动或观测剧情故事的发展,《王国之心》系列可以代表这个类型。
《王国之心》
(2)战斗型
这种类型更强调动作游戏的要素,强调战斗打击感、操作感和紧张度,关卡内战斗占比大、敌人多。相比战斗,剧情故事方面则相对薄弱。《真三国无双》系列可以说是本类型的代表作了,玩家在游戏中扮演三国时期历史人物或虚构角色,使用不同的武器和招式快乐“割草”,同时也包括一些角色扮演的元素,如升级、技能、装备等。游戏中强调战斗技巧和连招连击,在“割草”的过程中,玩家也可以逐渐加强自己的角色。
《真三国无双》
(3)解谜型
这种类型更强调解决难题、解开机关的冒险游戏要素,玩家游玩时更像是在玩密室逃脱。纯粹的解密型ARPG比较少,相对小众,我认为《Kena Bridge of Spirits》从某种程度上来说或许可以作为这个类型的代表作品。
《Kena Bridge of Spirits》
当然,实际上我们平时玩到的ARPG游戏基本都是兼顾了两个,甚至三个要素的,比如:荒野大镖客、对马岛之魂、艾尔登法环等。
《荒野大镖客》、《对马岛之魂》、《艾尔登法环》
2.关卡设计
关卡承载了游戏的玩法,流程,节奏,剧情,画面等大量元素,一般来说,有三种类型,按自由度从低到高分别是:线性关卡、多路径关卡和开放世界。
按自由度从低到高的关卡类型
(1)线性关卡
如果在一个关卡中,玩家只能通过一条预设好的路径从起点到达终点,那么这个关卡就是线性的。如下图,玩家从起点出发,经过路径1到达A点,再经过路径2到达B点,最终经过路径3到达终点。在实际的游戏中,节点A、B和路径1、2、3可以表示任何需要玩家参与的事件点和玩家移动路径。
线性关卡玩家移动路径图示
线性关卡的特点非常明显,它严格规定了玩家的行动路线和经过事件节点的顺序,保证了所有进入关卡的玩家以特定的顺序,在特点的节点触发特定的事件。由于这种特性,线性关卡设计在剧情型的游戏中被广泛使用。例如《使命召唤4:现代战争》中非常经典的狙击关,不管玩家如何计算,尝试爆头(没错,做出这种无用尝试的人就是曾经的我),狙击的结果只可能有两个:打断目标的左臂,关卡流程继续推进;或未能打中目标,任务失败。
《使命召唤4:现代战争》狙击界面
(2)多路径关卡
比线性关卡自由度更高一些的是多路径关卡,玩家在这种类型的关卡中具有一定的自由选择权利,可以选择沿什么样的路径,以什么样的顺序触发各类事件,最终到达终点。如下图,玩家从起点出发,可以选择通过A和C,到达终点,也可以选择通过B和C,到达终点。多路径关卡可以归结为:分别设计多个线性关卡序列,并有节奏地组合在一起。
多路径关卡路径图示
例如魔兽世界(虽然这款游戏已经离我们远去了)中的纳克萨玛斯副本,副本一共五个大区域,构装区、蜘蛛区、军事区、瘟疫区以及上层区域(右下角那个独立的部分),玩家必须先通关前四个区域才能进入上层区域挑战后续的boss,前四个区域没有通关顺序的要求,玩家可以自行决定。
《魔兽世界》中的纳克萨玛斯副本
(3)开放世界
玩家在开放世界中自由度最高,几乎可以说是“想去哪儿就去哪儿”。由于本文举例的内容与开放世界无关,这里就不展开了。
3.关卡加载
关卡的加载一般来说有两种:Hard Loading(硬性加载)和Dynamic Loading(动态加载),这里主要讲讲Dynamic Loading。
(1)Hard Loading
Hard Loading是指游戏在启动时或者进入某个关卡时,需要加载此关卡所有相关资源,直到全部加载完成后才能进入游戏或者场景。这种加载方式通常需要较长的等待时间,所以在所有资源加载完成之前会有一个loading界面遮挡玩家看到加载的过程,防止穿帮。比如在《魔兽世界》中,玩家进入阿拉希盆地战场时会出现下图的loading界面。
《魔兽世界》中阿拉希盆地战场的loading界面
(1)Dynamic Loading
Dynamic Loading则是指游戏在运行过程中实时监控游戏运行状态和资源的使用情况,并根据关卡的需求动态加载和释放资源,以减少资源加载等待时间和资源占用。这种加载模式下,通常在一个关卡被加载的过程中,是不会加载关卡内的所有内容,而是特定的部分,比如一些全局的设置和关卡一开始需要的几个区域,然后随着玩家在关卡内流程的推进,加载后续需要的区域,卸载不需要的区域。Dynamic Loading过程中最大的挑战是无缝的过渡,也就是如何保证在加载和卸载的过程中不会被玩家感知到。对于第一人称和第三人称的游戏来说,通常有两种方式:Air Lock(空气闸)和Shaped Corridor(折型走廊)。
Air Lock是指有一个封闭的结构,如下图绿色的Sublevel2部分。假设玩家在关卡开始的时候位于Sublevel1,且Gate1是关闭的,这个时候关卡只需要加载Sublevel1和Sublevel2。当玩家打开Gate1走入Sublevel2之后,Gate1将会关闭,此时关卡就可以卸载Sublevel1了,并且在玩家打开Gate2之前加载好Sublevel3,这样当玩家打开Gate2进入Sublevel3时,整体的游玩感受是连续的。这个例子里的Gate1和Gate2可以是场景里真实存在的物体,比如门或者其他遮挡物,也可以是某些单向结构,亦或是一段剧情动画,比如:玩家从高处跳下到低处的结构。只要玩家无法回到Gate的另一面,并且不能看到Gate另一面的物体,就是可行的。
Air Lock和Shaped Corridor图示
Shaped Corridor是靠控制玩家的视线的方式,让玩家看不到未被加载的结构。和Air Lock最大的区别在于不需要有Gate来阻挡玩家的行进路线和视线。如下图,假设玩家在关卡开始的时候位于Sublevel1,这个时候关卡需要加载Sublevel1和Sublevel2,当玩家进入Sublevel2的时候,需要加载Sublevel3,等玩家到达Sublevel3的时候,就可以卸载掉Sublevel1,然后加载Sublevel4。如果玩家往回走回Sublevel2的话,需要卸载Sublevel4,再加载Sublevel1。
利用Shaped Corridor控制玩家视线
在《战神4》中经常会出现一些放慢游戏节奏的情况,比如在火之国度穆斯贝尔海姆,试炼场和试炼场之间有一些似乎无意义的攀爬和跳跃,还有普遍存在的开门慢动作,乍一看好像有点怪异,实际上这些设计都在给Dynamic Loading争取时间。
02 用例设计
1.关卡的抽象流程和动线
在进行用例设计之前,需要先根据关卡策划提供的关卡paper design抽象出关卡流程,如下图。
关卡流程
一般情况下,玩家总是从关卡的起点出发,沿着既定路线在若干个Sublevel中参与了一些事件,经过一些特殊功能点后到达关卡的终点。在关卡流程中,既定路线将关卡内的起点、终点和各种事件点串联在了一起,从关卡设计的角度,这个既定路线被称为“关卡动线”。
“动线”这个概念实际上源自室内设计,房屋动线的最大用途就是让住户感觉走得舒服,不容易迷路,如下图示意。参与过房子装修的同学可能会有点印象,装修公司的设计师会在介绍他的装修方案时,说一些诸如动线设计合理之类的话。
室内设计房屋动线图示
在关卡中,合理的动线设计能够放大关卡目标感和游玩时的驱动力,让玩家的在游戏过程中获得更好的体验。既然关卡内的各类元素都是由关卡动线串联起来的,那么我们就可以沿着关卡动线展开,对动线上的所有元素进行用例设计。
2.起点和终点
起点和终点有一定的相似度,所以合并到一起来分析。在大部分情况下,对于一个单结局的线性关卡游戏来说,每个关卡有且只有一个起点和一个终点。
首先分析一下玩家在起点会发生哪些事:
1、播放一段关卡开场动画,开场动画一般有两种形式,交互式(QTE)和非交互式,其中交互式动画可能存在失败重试的情况,播放完毕后操作权交还给玩家;
2、加载全局常驻内容和玩家在Sublevel1游玩时所需的Sublevel资源;
3、设置玩家在本关卡的初始状态,比如血量,耐力,所持武器、物品信息等;
4、保存关卡进度,起点一般就是关卡的第一个存档点,和其他存档点的功能一样,保存关卡和角色的各类信息等。
接下来分析玩家在终点会发生哪些事:
1、播放关卡结尾的剧情动画;
2、开始卸载不必要的sublevel资源。
再细化拆解一下功能点,我们可以得到如下的思维导图。
关卡起点、终点思维导图
3.加/卸载点
加/卸载点的功能比较单一,仅负责控制关卡Sublevel的动态加卸载逻辑。当玩家角色到达加/卸载点时,会根据预先配置好的关卡分区执行加载/卸载操作。为了防止穿帮,加/卸载点一般会布置在以下的几种位置:
1、剧情动画,播放剧情动画时会夺取玩家的操作权,玩家角色和镜头的移动都是完全受控的,这时候就可以在玩家的视线之外进行加卸载操作;
2、玩家行动和视线相对受控的区域,比如下图《只狼》中主角刚刚苏醒后要经过的侧身贴壁行走;
《只狼》侧身贴壁行走
3、上文所说的“Air Lock “中的Gate,比如玩家进入某个地道之后触发了机关,身后大门关闭无法打开,形成了一个单向结构,导致玩家既不能返回上一个区域,也难以看到上一个区域。
再根据这几种情况的特点细化拆分,可以得到如下的思维导图。
加/卸载点思维导
4.存档点
存档点直接关系到玩家数据存储,所以需要重点照顾。为了保障玩家游戏体验的整体性,存档点是自动触发、自动执行的。存档点一般设置在以下几个位置:
1、与Gate重合,让玩家在再次加载进入游戏时能够从关卡某个区域的起点开始玩,形成相对完整的体验;
2、一些关键事件点前,比如关键剧情,关底的Boss战等;
3、可能会导致玩家死亡、玩家任务失败的事件点前,让玩家在失败之后能够快速进行重试;
4、关卡的起点,如果起点没有存档点,那么当玩家在前进到第一个存档点前失败或者遇到其他不可预见的情况时,就会回到游戏的初始状态。
存档的数据可分为玩家数据和关卡数据,结合上述的几种位置特点细化可得如下思维导图。
存档点思维导图
5.事件节点
事件节点是对关卡内除起点、终点、加卸载点、存档点之外其他所有需要玩家参与或与玩家密切相关的节点的统称。根据事件节点的具体内容,可以分为玩家控制、特殊移动、AI状态切换、脚本动画、关卡特殊玩法、环境切换和战斗状态控制。在设计用例时,可以分为进入节点、节点中和离开节点三个部分。
(1)玩家控制
1、控制角色能力
角色能力是一个广义的说法,包括角色的走跑蹲跳等基础移动,爬梯子、走平衡木这样的特殊移动和角色的某种能力等。比如在《原神》中,玩家进入游戏后根据任务指引,跟随派蒙到达一个七天神像,就可以解锁与神像共鸣的能力。
《原神》游戏界面
站在用例设计的角度,这些事件节点中的控制手段是否能正常生效只是比较基础的,在关卡中还需要关注这个问题:被禁止或未被禁止使用的能力与关卡中的某些元素是否会产生冲突导致体验不佳甚至卡流程。这个问题读起来比较拗口,我来举个例子。关卡中有一条封闭的走廊,这条走廊只有一个入口和一个出口,玩家进入这条走廊时中只被允许以最低速度行走,不能进行跑、跳、冲刺等其他操作,在出口时解除慢走的控制。乍一看这似乎没什么问题,然而我们可以发现在出口之前有两节台阶,如果台阶高度高于慢走时能够跨上的最高高度,那么角色就无法走上台阶到达出口了。
玩家从入口行至出口
分为进入、节点中、离开三个部分分析归纳一下,可以得到如下思维导图。
能力控制思维导图
2、控制相机
对于相机的控制有两种方式,一种是只改变相机类型,但是不夺取玩家对相机的控制权,比如进入狭窄空间时将相机调整为室内相机;另一种是直接由系统接管玩家相机,玩家无法控制或者只能在受控范围内控制相机,比如在《刺客信条》系列中,玩家控制角色到达鸟瞰点之后,会触发鸟瞰点相机,查看场景全貌。
《刺客信条》游戏界面
和控制角色能力类似,控制相机也可以分为进入、节点中、离开三个部分进行分析,可以得到如下思维导图。
相机控制思维导图
(2)场景交互
根据剧情和玩法的需要,主角经常和场景中的物件产生交互,例如在《The Last of Us》中玩家可以控制乔尔把倒在地上的梯子架设到墙边,以形成一条新的路径。
《The Last of Us》游戏界面
这可能会带来一个隐藏的问题:玩家可能会做一些关卡设计之外的事情,导致自己无法通过场景交互顺利到达目标地点或完成任务。在用例设计时需要考虑到这种异常的情况,针对这类问题,举一个例子。假设玩家需要将倒地的梯子架设到墙边以翻过墙壁继续关卡流程,在这个例子中,梯子可能会因某些原因导致破坏,那么玩家在这一段场景交互的流程里可能发生如下三种情况:
1、梯子被架设,且没有被破坏,玩家通过梯子翻越墙壁继续关卡流程;
2、梯子被架设,但是被破坏,玩家无法通过梯子翻越墙壁,关卡流程无法继续;
3、梯子未被架设,但是被破坏,玩家无法架设梯子,关卡流程无法继续。
对于2、3这两种异常情况,如果没有设置失败重试或者其他保底机制就会产生bug了。归纳一下,可以得到如下的用例设计点。
设计点 | 需要验证的内容 |
交互流程均操作成功 | 事件成功 |
交互流程中角色出现异常操作 | 事件失败,应有异常处理和重试 |
交互流程中场景物件出现异常操作 | 事件失败,应有异常处理和重试 |
交互流程中其他意料之外的异常 | 事件失败,应有保底处理和重试 |
(3)NPC行为切换
关卡中的Buddy和敌人的行为都是由AI控制的,当玩家到达NPC行为切换的事件节点时,会改变Buddy或敌人的行为状态。设计用例时需要将Buddy和敌人分开设计,首先分析设计Buddy的部分。
Buddy一般有这几种行为:沿既定路线带路、跟随玩家、协助玩家攻击敌人、自主攻击敌人、前往指定位置、执行其他指定事件等。按照Buddy具体行为的特点分析可得如下思维导图。
Buddy行为切换思维导图
除Boss外的敌人一般有这几种行为:静止待机、沿既定路线移动、响应、调查刺激源、搜索玩家、战斗行为、执行其他指定事件等。按照敌人具体行为的特点分析可得如下思维导图。
敌人行为切换思维导图
(4)机关解谜
为了提高关卡的趣味性,策划往往会在流程中设计一些机关解谜。常见的机关形式有:机关门、陷阱、机关装置、其他可移动可旋转可破坏的物件,不管是何种形式,我们主要关心的是机关的操作以及正常、异常操作后的结果。
机关思维导图
除此之外,机关还有一个需要留意的特点,它们经常伴随着可变化的物件,这部分用例和下文的场景变化部分一起做分析设计。
(5)场景变化
这里的场景变化不是指光照、天气等方面,而是关卡内可以被移动、破坏的物件。比如在《战地1》中可以被破坏的建筑。
《战地1》游戏界面
对于用例编写来说,物件变化可以分成这几种情况,新增、移除和变化,场景物件从A点移动到B点,对于A点来说这个物件移除了,对于B点来说这个物件新增了;场景物件从A形态转变成B形态,那么就是变化了。另外,场景内物件发生变化时,可能还会导致关卡内路线发生变化,比如倒塌的房子阻挡了原有道路,还可能会导致光照、GI、阴影等渲染方面的内容发生变化。从这些方面入手分析,可以得到如下的思维导图。
场景变化思维导图
(6)特殊玩法
有时候,关卡里会设置一些特殊玩法,仅在当前关卡使用。比如《对马岛之魂》的火厢车,如果没有记错的话应该只有在一个破坏蒙军战船的任务中可以使用。
《对马岛之魂》游戏界面
此类特殊玩法除了常规的用例之外,还需要关注是否可能将它带到限定范围之外的地方。之前《原神》曾经有一个线上bug,可以在公子达达利亚传说任务的副本中利用断网重连的操作将试用的公子角色带到任务副本之外,只要不继续完成传说任务,那就可以一直持有这个试用的公子,他不仅可以在大世界中任意使用,甚至可以拿来参与其他副本的战斗。
《原神》游戏界面
6.动线上的其他元素
除了上述的几类,关卡动线上还有其他重要度相对较低的元素,例如无需玩家参与的氛围事件,在特定位置投放的战利品。这些元素的用例设计可按照常规的玩法、系统用例设计方法,从配置项和实际需求出发,编写用例。
7.形成具体用例
上文只是关卡动线上各元素的用例设计思维导图,还需要根据关卡的实际设计玩法、系统模块的基础用例和场景测试通用用例case by case进行填充才能形成具体的关卡用例。
具体关卡用例产生流程
03 让用例更可视化
结合用例设计思维导图、关卡实际设计和各玩法、系统模块的基础用例后,关卡用例的文字篇幅会很大,并且还会因为存在一些文字难以描述清楚的case导致阅读难度进一步增大。
用例形成的难点
所以,我们需要在用例中加入一些可视化的元素以提高用例传达信息的效率,关卡策划提供的图文并茂的paper design是一个很好的参考。
1.俯视图
俯视图是指从上方往下看的图形或图像,通常用来展示物体或场景的平面结构。对于关卡来说,经过标记说明的俯视图可以比较全面地展示出关卡整体结构、路线和布局。如下图,通过俯视图可以一览关卡的布局和设计的几条路线。
俯视图举例
但是由于关卡元素过多,如果将所有元素都标记到俯视图上反而会丢掉重点。在实际操作中可以在编辑器中截取关卡总览的俯视图,首先只标记如起点、终点、加卸载点和存档点之类的流程重要节点,然后截取每一个关卡Sublevel的俯视图,在其中标注具体的事件节点,并通过事件编号,将俯视图和具体的用例联系起来。
这类似我们现实生活中经常看的地图,在比较大的尺度上,我们只能看到网易大厦周围有四条路,但是看不出路上具体有什么。放大到网易大厦的区域,能够看到内部道路和一些关键点,如大门、周边公交站。再选择某个具体的公交站,能够看到此站点的名字,停靠的公交线路。
百度地图——网易大厦周边
但是关卡不会总是设计成平铺直叙的样子,为了游戏性和趣味性,经常会出现多层结构,这种时候靠俯视图就没办法很好地传达关卡信息。
2.透视图
透视图原本多用于机械工程和建筑工程中,符合透视原理的图可以帮助观察者更加直观地了解物体的结构和形状、大小和比例关系。关卡实际上也可以理解为是一种建筑,一些复杂多层的关卡结构正好可以使用透视图的形式来提高关卡信息的传达效率。比如下图是玩家制作的《原神》中须弥沙漠地区的赤王陵的透视图,相比游戏中的地图,这样的形式无疑是更好,更直观的。
《原神》游戏界面
在实际的操作中,当俯视图无法很好地传达关卡信息时应补充截取关卡透视图,为了保证透视图能包含足够的关卡信息,最好能在关卡BlockMesh完成后再截取,截取之后和俯视图一样在其中标注具体的事件节点,并通过事件编号,将透视图和具体的用例联系起来。
2.分镜图
分镜是指电影、电视剧、动画等影视作品制作过程中,将整个故事分解成一个个镜头,并在纸面上用画面、文字等形式进行描述和安排的过程。下图的Storyboard就是分镜稿,它可以帮助导演更好地将自己的Idea传达给Team,从而拉齐整个团队的目标。
拍摄电影中的分镜
这个特点也可以为测试用例所用,让原本干巴巴的文字用例“活“起来。文字测试用例在以下这两种情况时会显得心有余而力不足:
1、表达某种元素的空间位置;
2、表达某种物件的移动轨迹;
第一种情况通过上面介绍的关卡俯视图和透视图结合用例的方式可以解决,第二种情况就可以尝试用分镜图来结合用例。
举一个例子,假设关卡设计了一段管道爬行,玩家进入之后只能推摇杆沿着管道向前爬或者是向后爬,在管道中的相机也是一个固定轨道的相机,镜头方向固定向前,跟随玩家前进、后退,以模拟玩家在管道中因空间局促无法转头看到背后的情景。那么这个固定轨道相机的用例怎么写呢,糙一点的可能是“管道爬行中相机表现正常“,如果有人新接手这个需求,那他看到用例肯定还是一头雾水,什么才是表现正常?
精细一些的可能是”管道爬行中相机只能沿既定轨道移动,无法通过摇杆操作相机“,接手的人多半还会有疑问,既定轨道是什么样的,以什么样的规则沿既定轨道的移动?更详细的用例可能是”玩家在管道爬行时,相机只能沿着管道方向,随角色移动而同步移动,并且相机方向只能朝向管道前方,相机不响应玩家任何相机控制的指令“,此时细心的人还会提出相机相对玩家具体位置的问题,用例再扩充下去就会显得非常长了,此时千言万语不如一张分镜图。(下图取材自《肖申克的救赎》,镜头和例子是相反的)
截取自《肖申克的救赎》
在实际的操作中,分镜图既可以来自导演的分镜稿,也可以在关卡中实机截图,能够清晰答意即可。
04 结语
以上就是根据动作角色扮演游戏特点为出发点的一种关卡测试用例设计方法的探索,随着项目进度的推进我们也可以获得更多的实践机会,在未来我们会发布更多这方面的分享和大家共同探讨。
最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。