基于代码层游戏规则设计的体素游戏表现力研究
2022-07-07崔梦天董国庆姜玥何健圣李裕岚吴蕾蕾
崔梦天,董国庆,姜玥,何健圣,李裕岚,吴蕾蕾
(1. 西南民族大学计算机系统国家民委重点实验室,四川成都 610041;2. 弗里堡大学物理系,瑞士 1700)
游戏行业的发展,离不开大型工作室的亲历巨制从而推动整个行业的进步,同时也离不开各种中小型制作团队努力发挥创意,用小成本体现大乐趣,拓宽游戏市场.随着时间的推移,中小团队也一直在寻找简单、高效、便捷的开发方式,包括策划、美术和代码层面[1].其中,因为早期电脑的机能限制,很多开发者把美术品质限制在2D 维度上,而在2D 维度中,最简单且足够支撑游戏美术品质表现的方式就是像素风格,通过简单的特快堆叠,就能勾勒出生动形象的人物和场景.直至目前,仍有相当数量的开发者在采用这种方式开发游戏,他们更专注在游戏玩法本身上的突破,将一个综合型工程转变为代码层级的构思工程,即软件工程.随着《我的世界》这款游戏风靡全球,体素块逐渐进入了开发者和玩家的视野,一个个方块堆叠起来的世界,减少了视觉上的感受,却能专注于玩法上的体验,是一种前所未有的游戏体验方式[2].有敏锐的开发者发现,体素和像素有着诸多相似之处,甚至可以说一脉相承.体素建模类比于像素绘画,拥有像素绘画的许多优点:开发成本低、低精度提升加载速度、画面表现力满足基本游戏表现力的需要,并且风格方面还能作为游戏的卖点进行升华.体素建模作为美术主体的游戏,还是一个新兴的游戏门类,在不断的发展中,并且体素游戏目前覆盖的游戏类型和领域都有限[3].
主流三维游戏一般都需要庞大、精致的游戏世界[4].所谓的游戏场景,不单指玩家可见的三维渲染环境,也包含游戏性系统(游戏机制、物理碰撞、人工智能等)所需的虚拟环境. 多数三维游戏使用三维三角形网格建构大部分的游戏世界,包括地形、建筑、植被及其他静态物件. 一些以自然户外环境为主的游戏,如大部分RPG、MOBA 类型游戏,会使用到高度场去表示地形;一些室内为主的游戏,如一些FPS、TPS、ACT 等,会使用构造实体几何技术去建构基本的室内环境[5](在许多游戏引擎中称为 BSP/binary space partitioning 笔刷). 游戏场景的制作占总制作成本的一大部分,而随着游戏平台的性能提升,以及游戏内容需求的膨胀,游戏世界的制作成本也因应不断提高[6].三维网格是合乎当代硬件的游戏世界表示方式,也是较自由的建模方式,而且有成熟的数字创作工具如3ds Max 和Maya.但其缺点包括建模成本高、仅为表面表示方式(可能无法判断一个任意点在其外还是其内)、不容易修改(尤其是在展开UV 之后)、不容易做连续或离散级数的细致程度等[7]. 高度场和BSP 的制作成本较网格低,而且较容易修改和实现LOD,但其适用场合就非常局限.
本文从现当代游戏设计理念和设计技术出发,结合贴合中小型团队开发实际需求,并结合软件工程和游戏设计方法进行体素游戏的领域拓展.针对体素游戏玩法领域拓展的核心思路,对游戏进行整体设计.并以此为基础对各个具体细节进行详细的规定和预览打磨,力图从体素游戏表现、玩法衔接流畅度、功能操作手感等模块进行详细规划功能需求.通过对构建好的游戏系统,在场景中进行深入的测试,测试其玩法功能符合策划需求,整体游戏玩法功能正常,使用效果达到预期.
1 游戏整体设计
1.1 设计思路和原则
为了贴合3D 游戏的设计方法,以及迎合体素较低开发门槛的主题,采用玩法组合的形式,进行关卡组合,并且每个关卡都为风格迥异的关卡. 玩法关卡组合的方式,能在一个完整游戏循环中容纳更多独立的玩法机制,相当于在一个大游戏循环中浓缩了几个小游戏循环.并且玩家能通过简单的玩法学习,将操作思路带到不同的关卡中,有一定熟练度的同时,也是对玩家的一种挑战. 不同玩法之间的融合,体现了代码编写规范,强调了代码编写规整重要性[8]. 常规线性开发流程中,根据游戏设计的轴心进行分支编写,代码总体是在一个逻辑结构中完善的. 采用不同玩法融合的方式,首先,能体现中小型开发团队能专注于玩法设计本身的优势(花更多时间攻克玩法设计,花更少时间制作美术资源).其次,能提高软件工程管理水平[9].
将设计思路进一步具体化,具体需要提供给玩家什么内容、感受,具体需要设计哪些元素等详细设计内容.设计原则内容如下:
1)玩家需要清晰的目标. 这是主要设计原则,需要在每个关卡,甚至每个界面给玩家提供明、暗示操作引导,否则玩家不知道游戏目标或如何操作,就会极大程度减少玩家的体验时间.玩家明确具体游戏目标后,就能自主根据场景中提供的内容决定如何实现目标.为此需要专门设计一个关卡进行初次游玩教学,逐一介绍游戏内的元素,并配合实际操作反馈进行同步教学.
2)及时反馈玩家的行为.玩家不应该在游戏中进行对应操作时,无法感知到操作的结果. 玩家在进行体验时,无论点击按键、命令或是记录画面,都应该获得及时且符合逻辑的反馈.及时反馈包括视觉反馈和听觉反馈,并且在必要时需要双重反馈结合进行“注意力引导”,让玩家能更好地体验到沉浸感.为此需要为游戏中的所有行为设计操作反馈,包括但不限于点击、选择、攻击、受击、胜利等.
3)避免向玩家提供不相关信息和不相关选项.玩家在游玩关卡时,会专注于关卡完成条件的达成,并且会自主充分利用场景元素之间的互动和联系进行辅助通关.确保关卡场景中出现的元素都是相关且有帮助的,这能够玩家在体验时,面对众多游戏元素不会茫然失措,所谓用户选择越多决策时间越长,并且这种长时间的决策体验对游戏来说并不是一个正面影响.
4)尽可能减少按键和按键操作. 游戏玩法的受众,会随着该玩法需要的按键操作增多而减少,更多的玩家更倾向于操作简单但是有趣的游戏[10]. 所以减少按键数量和减少按键操作很重要,而实现这种效果最好的方式就是按键功能集成,即将多个功能集中在少量按键上,能随意切换,或一次操作有多重功效.
5)玩家能轻松的暂停、保存和继续操作. 在一个完整的游戏循环中,游戏时长往往都是不能通过一次游玩就结束的,所以必要的保存和暂停是游戏的基本功能.并且良好的游戏暂停和保存,需要是及时性的,不是到某个地方才能保存或者其他形式,这样可以给予玩家更高的容错率,且适应玩法关卡集成的设计思路[11].
1.2 系统组成与设计
本文的体素游戏系统由建模、场景和功能三大模块组成,主要内容如下:
1)角色、道具和场景体素建模.
2)角色实现骨骼动画和蒙皮实现模型动作.
3)开发主角操作系统.
4)实现关卡选择和数据保存.
体素游戏系统的功能模块图如图1 所示.
图1 功能模块图Fig.1 Functional module diagram
体素游戏系统一般由用户输入、上帝视角运动摄像机、表现渲染模块、物理模块、操作模块等模块构成完整系统.通过捕捉键盘和鼠标输入信号方式控制系统运行.体素游戏系统的结构图如图2 所示.
图2 体素游戏系统结构图Fig.2 Structure diagram of voxel game system
2 体素游戏美术资源制作
2.1 建模思路与方法
根据前期策划阶段获得的美术需求,使用MagicaVoxel 体素建模软件进行三维体素建模[12]. 三维体素建模部分,需要构建人物、怪物、道具和场景四大部分,在体素模型建模完毕后,将素材导出并导入Unity,后续工作将在游戏引擎中配合C#脚本实现.
因为MagicaVoxel 是一款简单操作风格的体素建模软件,并且使用像素色块填充的方式,选择颜色后可以直接进行模型填充,因此构建好层次模型后,将使用MagicaVoxel 进行体素模型制作. 建模完毕后可以直接导出文理和obj 类型文件.MagicaVoxel 建模的展示如图4 所示.
图3 模型层次图Fig.3 Model hierarchy diagram
图4 MagicaVoxel 建模展示图Fig.4 Modeling diagram of MagicaVoxel
2.2 模型建模
主角,也就是玩家,选取的是人气动画里的角色,一般在制作3D 模型之前,都会有原画师对角色进行平面绘图,而因为本文选择人气动画作为背景,所以可以使用一张图片进行参考建模,进行人体T 字模型建模[13].建模前后的对比如图5、6 所示.
图5 主角平面形象Fig.5 Main character plane image
主角通过移动进行攻击,并且主角拥有武器. 主角使用的武器是一个钉头锤,并且配置铰链系统,建模部分实现钉头锤,其余部分在Unity 游戏引擎中通过C#脚本和物理系统控制实现. 钉头锤和铰链系统如图7 所示.
图6 主角实体像素形象Fig.6 Main character solid pixel image
图7 钉头锤与铰链系统 Fig.7 Nail-head hammer and hinge system
本文的体素游戏系统不是一个以打斗为主的游戏,主旨皆为提供快乐创意,所以设计3 种怪物,分别是水壶怪、怠惰手下、怠惰,迎合低中高三个难度,并且根据特定场景和特定场合上场.3 种怪物的展示如图8 所示,从左到右依次是水壶怪、怠惰手下、怠惰.
图8 怪物建模Fig.8 The monster modeling
玩家在进行一局游戏的过程中,需要添加变数,也需要感受到成长,所以设置了5 种道具让玩家收集和使用.从左到右依次是时间增强器、生命恢复、动能增加、移速增加、加分星星,如图9 所示.
图9 道具建模Fig.9 Props modeling
根据前期游戏策划中的地图设计需求,从平面图或设计需求进行场景屠体素建模,并且要根据之前建模完成的角色、道具模型的尺寸,进行比例放大,尽可能地不通过额外数据调整,就能适配所有角色和道具.场景建模如图10 所示,从左到右一次是新手教学平板地图、幻境迷踪三维地图、地狱行者迷宫地图、神圣角斗竞技场.
图10 场景建模Fig.10 Scene modeling
3 体素游戏系统实现
3.1 游戏场景搭建
根据游戏策划对于关卡的设计,采用每个关卡都为一个单独场景Scene 的设计方法.并且通过前缀标识的方式让场景自发进行排序,同时场景排序也是场景的载入顺序[14].
关卡场景建立好后,再添加开始游戏与关卡选择场景,游戏启动场景(进行游戏最初的初始化工作),资源加载场景,以及开屏动画场景.
实际工程场景排序及功能如下:
0-GameStart:初始化和主界面场景. 最快速的启动场景并载入场景脚本Script. 该场景主要进行游戏的初始化操作,将后续运行所需的所有数据加载进内存,以便其他脚本访问.在游戏初始化完成后,将首先展示游戏的主界面,包括开始游戏、游戏设置等重要UI 展示,方便玩家首先调整.
1-StageSelect:关卡选择场景. 点击开始游戏后,进入关卡选择界面,通过鼠标滑动和点击选定进入要游玩的关卡.
2-Xinshouguanqia:新手关卡. 主要介绍游戏的游玩方式,并搭配可以上手的操作体验,让初次游玩游戏的玩家能以最快的速度了解游戏的内容.
3-Mihuanqizong:幻境迷踪. 三维移动和战斗的视觉表现关卡.
4-Diyuxingzhe:地狱行者.暗黑风格解谜视觉表现关卡.
5-Shenshengjuedou:神圣角斗.竞技场风格生存模式战斗玩法关卡.
99-LoadScene:加载场景.因为加载场景需要最低限度的视觉表现,目的是告诉玩家游戏还在资源加载过程中,没有卡死.
LOGO:logo 展示关卡,展示游戏开发者信息,开发者归属.
3.1.1 初始化和主界面场景搭建
主界面场景主要分为两部分,主角动效展示部分和主界面UI 布局部分.
1)主界面UI 布局
根据前期策划需求框图,可以大致确定主界面UI 按钮内容和排布位置. 然后在Unity 引擎中进行Canvas 布局,如图 11 所示.
图11 主界面UI 实现Fig.11 Main interface UI implementation
进一步的功能需求得知,需要在点击按钮后激活相应的面板,这些面板也需要在主界面UI 中进行布局.
2)主角动态效果展示
主角动效主要展示角色的所有动作,并且角色在做动作时不会移动,会在原地一直播放动画,这一部分主要通过Animation 实现镜头旋转,状态机实现动效播放.然后就是展示动作需要一个地形进行打底,需要进行搭建.T 字人物模型如图12 所示.
图12 T 字人物模型Fig.12 T character model
3.1.2 关卡选择场景搭建
关卡选择场景主要以UI 为主,展示各个关卡的大致样貌和历史最高积分,以及展示关卡选择的动态效果.并且关卡选择场景在搭建完成后,需要使用脚本进行主界面和关卡之间的串联,作为两者中间的桥梁.关卡选择实现如图13 所示.
图13 关卡选择UIFig.13 Level selection UI
3.1.3 关卡场景搭建
三种关卡场景如图14 所示,从左到右依次是幻境迷踪、地狱行者、神圣角斗.
图14 场景实现Fig.14 Scenario implementation
1)幻境迷踪关卡搭建主要设置敌人点位、空气墙、道具刷新点以及设置主角出生位置. 敌人点位以及道具刷新点采用unity 标签设置,能在Editor Scene场景下看到编辑的点位,而在Game 场景下会被自动隐藏.
2)地狱行者关卡搭建主要设置敌人点位,道具点位,主角位置,环境光和主角光等光源设置.该关卡注重氛围表达和场景烘托,而对于这些游戏表现最有益的方式便是使用灯光渲染进行.该场景主要使用点光源和平行光源两种光源烘焙场景.无论是点光源还是平行光源,区别在于发光位置及区域不同,常用参数以及灯光渲染功能都是大同小异的.主要使用功能参数如下:
Type:光源类型,点光源为Point 类型,平行光源为Directional 类型.
Color:灯光颜色,影响光源的环境颜色.
Mode:渲染模式,Realtime 为实时渲染,比较消耗性能,效果最好.
Intensity:光源强度.
Shadow Type:阴影类型.No Shadows 为无阴影.
Render Mode:渲染模式.Auto 为自动渲染.
Culling Mask:阴影遮罩,阴影剔除. Everything 为阴影照射在所有物体上.
3)神圣角斗关卡场景搭建主要进行敌人点位、道具点位以及主角点位的位置布置.
3.2 角色战斗系统
角色战斗承载了大部分的玩法表现功能.实现角色战斗系统分为攻击和移动2 个部分.
3.2.1 角色攻击
角色攻击并没有常规游戏中的攻击输入按键,而是根据玩法设计,玩家只需要进行移动便可以进行攻击.因为在所选取的人气动画中,该角色是使用链锤进行攻击的,链锤的特点便是通过甩动可以使锤头甩动,从而达到锤头砸击的目的.
实现链锤系统,需要使用unity3d 引擎的铰链系统进行链子连接. 链接方式为,使用Cube(unity 自带3d 模型)作为链子节点,使用锤头作为链子结尾,将链子的各个节点包括锤头连接起来,每个节点会根据前一个节点的位置和受力情况处理自身的位置和受力情况,达到节点联动的效果.最后,将首节点与角色手部绑定,实现角色抓住锤子的表现效果.
3.2.2 角色移动
游戏为约45°角上帝视角游戏,即通过固定的角度和距离观察角色的移动,不会受到操控的影响. 而在此摄像头观察模式下,游戏角色采用8 方向移动模式,即每45°为一个运动方向进行角色操控.实现角色8 方向运动,采用的方式是水平、竖直向量组合的方式.先获取角色水平向量horizontal,然后获取角色垂直向量vertical,这两个向量即决定了角色的运动方位和运动强度(输入按键的强度)[15]. 然后使用一个三维向量remGoto 作为水平和垂直向量的加和,组成一个新的三维Vector 向量.该三维向量即当前角色的实际运动方向和运动强度. 随后设置角色的移动朝向(LookAt),和设置角色动画播放,即可在下一帧刷新时根据向量的参数移动角色的位置数值[16].
由于之前设置了锤子的铰链系统,而铰链系统已经连接至角色的手部,所以在角色移动时,会根据角色的动量和位置,直接通过物理参数影响铰链系统,进而让整个锤链运动起来.并且通过操作角色进行自身旋转,也能模拟甩锤子时的旋转方式,以这种方式进行攻击.
4 测试实验
将功能开发完成的游戏关卡功能和三维体素模型使用Unity3D 游戏引擎进行整合数据打通,将视觉效果和代码功能组合,运用Unity3D 引擎内置的打包功能,将游戏整体打包导出成exe 文件进行性能与系统性测试,验证基于Unity3D 引擎开发的体素游戏系统的运行效果. 根据体素游戏系统的功能与性能指标,以及玩家的实际游玩方式,设计的整个系统的测试流程如图15 所示.
图15 体素游戏测试实验流程Fig.15 Voxel game testing experimental process
本文根据一般玩家进行体素游戏游玩的目的为基础,对整个体素游戏系统进行了完整的测试实验.实验软硬件参数为:系统版本Windows10 Pro 1909;CPU Intel(R) Core(TM) i5-9400F CPU @ 2.90GHz;内存16 G;硬盘容量1 T;显卡NVIDIA GeForce GTX 1650.
在测试之前需要检查导出的exe 项目对整个体素游戏系统的加载是否正常,包括UI、模型初始化,战斗、场景功能加载是否正常. 本次测试主要测试三大项目,分别为UI 交互测试、角色战斗功能测试和场景功能及UI 联动测试.正常启动界面如图16 所示.
图16 正常启动画面Fig.16 Normal splash screen
4.1 UI 交互测试
UI 交互是否正常,直接影响了玩家在初始状态下玩游戏的第一印象. 在游戏Loading 完成进入主界面后,主界面的UI 和更深层次的UI 都需要运行正常并有相应的反馈表现. 需要对所有可交互UI 和按钮进行测试.
打开exe 文件后,等待短暂的加载,可以进入主界面.在主界面拥有5 个ButtonUI 控件,分别对应5个不同功能的可点击按钮.本课题所开发的体素游戏制作了丰富的视觉反馈效果. 在主界面的5 个UI 控件都有触碰高亮功能,依次从开始、设置、帮助、说明和退出5 个按钮进行触碰但是不点击,可以触发高亮功能.
功能方面,除了开始游戏和退出按钮是直接跳转按钮,其余三个按钮都为弹窗按钮,点击后会有该按钮对应的专用弹窗界面.首先测试设置按钮,点击后,设置按钮会弹出设置弹窗,在设置弹窗中,可以设置游戏的BGM 音量,还可以通过点击清除存档按钮,清除本地最高分存档. 经过测试,滑动音量滑动条可以进行BGM 音量调节,点击清除存档按钮,确定后即可清除本地最高分存档. 测试帮助和说明按钮,点击帮助和说明按钮,会弹出帮助弹窗和说明弹窗,两个弹窗对应的信息不同. 测试开始和退出按钮,由于这两个按钮指向性较强,也不需要配套的弹窗提示,所以采用直接跳转的方式,如果点击了这两个按钮就会直接实现对应的功能. 点击开始按钮后,游戏进入到了选择关卡界面,点击退出按钮后,游戏会直接退出.
进入选择关卡界面后,测试关卡选择的表现动效,当玩家不点击关卡,而是在关卡选择名称上进行滑动时,会有白色跟动块进行跟动,以此表现当前查看的关卡信息具体关卡指示. 在关卡选择界面,点击对应的关卡会跳转到对应的关卡中,点击返回会返回主界面.
在新手关卡中右上角有帮助按钮,点击后会弹出帮助弹窗,里面记录了游戏的所有详细信息,玩家可以点开对应的模块查看,经过测试没有问题.
在所有关卡中,点击ESC 键可以暂停游戏,并打开退出设置框,可以进行设置,或返回主界面,点击确定后游戏返回主界面.
4.2 角色战斗功能测试
除了在幻境迷踪关卡中,玩家拥有跳跃的地图功能,其余关卡玩家都是通用的战斗功能. 首先测试通用战斗功能,键入方向键,角色就可以在地图中移动,移动过程中碰撞到地图搭建时设置的空气墙会停止移动.跟随角色的锤子铰链系统运行正常,在角色产生转动物理效果时,锤子和链子会跟随角色的转动效果进行运动,呈现出一种旋转甩锤子的效果,并且锤头击中怪物或墙时有真实的物理反馈.角色与敌人碰撞会造成生命值减少,并播放对应的生命值减少特效;而角色与道具碰撞时,会获得道具,并让角色附带道具特效,在碰撞道具时,也会播放碰撞道具特效.在幻境迷踪关卡中,玩家键入Space 空格键,可以在三维空间中进行跳跃,跳跃到空气墙的高度时,会被挡住,测试证明跳跃功能正常. 幻境迷踪关卡跳跃展示如图17 所示.
图17 幻境迷踪关卡跳跃Fig.17 Unreal Track level jump
4.3 场景功能以及UI 联动测试
首先测试通用战斗UI 联动效果,在所有场景中,拾取道具会触发 buff 效果,在 UI 层级表现为数字buff 持续时间计数器数字增加,或星星数目和分数增加,或生命值爱心增加;被怪物攻击生命值爱心会减少.经过测试,拾取时间增强器道具,时间增强器计数会增加,然后拾取动能增加、移速增加道具,相应增加的持续时间也会增加,说明三样道具的功能和UI 联动没有问题.拾取生命恢复道具,生命值爱心会增加,拾取加分星星道具,分数和星星数目都会增加,说明两样道具的功能和UI 联动没有问题.
测试新手关卡场景功能,在该场景中移动和拾取道具可以获得相应的效果,攻击怪物可以将怪物消灭,并在一段时间后怪物会刷新. 点击帮助按钮可以弹出帮助界面,并且游戏会暂停. 在新手关卡受到怪物攻击到没有生命值时,会弹出游戏建议,让玩家去游玩其他关卡,表明新手教学关卡已经结束.
图18 战斗UI 联动Fig.18 Combat UI linkage
测试环境迷踪关卡,在该场景中可以在三维空间中移动,可以跳跃,在下落到模型位置时可以站立在模型位置上,可以在各个道具刷新点位获取道具,获得相应的buff 效果,击杀怪物后可以得分. 倒计时功能初始60 秒,随着时间的推移时间计数器会数字降低,在时间结束后会记录最高分.
测试地狱行者关卡,在该场景中搜集足够的星星就可以通关,触碰星星和道具可以获得对应的效果,在场景中寻找星星时,消耗的时间也会在时间计数器中数字增长,寻找完成足够的星星后游戏就会结束,并记录最高分.
测试神圣角斗关卡,在该关卡中需要与消灭许多敌人,尽可能地生存更久的时间. 在该场景中没有时间计数器,取而代之的是阶段标识器,在达到300 秒战斗时长后,就会进入IMPOSSIBEL 阶段,怪物会刷新出最高等级的怪物,并且刷新时间会变短. 在该场景中,拾取道具可以获得对应的效果,并会在一定时间后刷新.怪物会不断的从场景四周刷新,并向玩家前进,在一定时间后刷新出的怪物会出现等级变化.在生命值消耗完后会进行分数结算.
图19 关卡场景游戏记录展示Fig.19 Level scene game record display
5 结论与展望
本文主要研究了基于Unity3D 游戏引擎,关于体素建模以代码提高游戏性的开发和应用,并重点阐述了体素模型与其贴图等配套工艺的建立,在Unity3D游戏引擎中对场景的还原与搭建,使用C#脚本进行功能设计与交互串通等. 使用MagicalVoxel 轻量级体素建模渲染一体工具,结合国内外优秀体素游戏模型参考,以及对前期策划美术需求进行剖析,进行角色、道具、场景等游戏中的核心元素进行细致的实体建模.依托Unity3D 引擎的功能,将制作好的系统打包导出成exe 可执行文件,并结合现有硬件环境,对体素游戏系统整体进行测试实验,并记录保存了实验过程中采集到的相关数据,验证体素游戏系统整体的可靠性和游戏表现能力,并实现了基于Unity3D 游戏引擎的体素游戏系统的开发与验证,完成了通过玩法设计对体素游戏整体游戏表现能力的革新,提供给玩家和开发者对于今后如何使用体素进行游戏开发和体验一个完整的建议.