刘玉坤?彭伟国
摘 要 近年来,随着移动互联设备的普及,社会生活节奏的加快,人们工作压力的增大,游戏逐渐成为大家的主要娱乐方式。本文在对游戏玩法和游戏故事内容的2D游戏分析的基础上,以被流放至外太空为游戏背景,架构一个未来世界,让玩家在所给定的地图中自由发展与冒险。
关键词 星际流浪;Sandbox Game;高自由度
引言
随着科技的发展和社会的进步,人们的生活水平发生了质的改变,在我国游戏行业正在经历一个黄金发展周期[1]。从2008年至2018年间,中国的游戏用户规模增长了5.5亿人,总规模达到了6.26亿,增长率由2008年至2011年的大幅增长至今逐步趋于稳定,现如今中国已经拥有了极其巨大规模的游戏玩家群体,游戏行业也突飞猛进,前景十分可观,随着移动互联设备的普及,社会生活节奏的加快,人们工作压力的增大,游戏逐渐成为大家的主要娱乐方式。
3D游戏为游戏市场的主力军,但是近几年一些以游戏玩法和游戏故事内容为主力方向的2D游戏异军突起,这些游戏大都不追求真实的画面和华丽的特效,但正因如此,独立开发者们才能节省出更多的成本和精力来打造游戏独特的玩法与丰富的内容,并且2D游戏的复古化风格能增加游戏的年代感[2],让喜欢怀旧游戏的玩家获得更好的体验。
1需求分析
1.1 游戏功能的划分和分析
游戏需要实现角色选择,音乐控制,人物角色控制,摄像机跟随,背包系统,物品放置,游戏胜负判定七个功能。下面对这些功能一一进行需求分析。
(1)角色选择。该小节玩家能够自主选择角色,实现不同角色属性及图片的初始化。
(2)音乐控制。该小节玩家能够自由控制游戏BGM的开启与关闭,适合不喜欢游戏音乐的玩家使用。
(3)人物角色控制。该小节要求控制角色移动以及使用不同的方式攻击,而敌人不需要玩家控制,玩家控制的角色有行走以及两种不同的攻击动作,玩家击中敌人后敌人将会损失生命值。
(4)摄像机跟随。该小节为了使玩家在游戏中有切身的体验以及舒适的操控,摄像机的位置需要跟随游戏角色移动,如果不对摄像机加以控制,那么角色会走出摄像机范围,玩家也无法看到完整的游戏场景,游戏流程也无法正常进行,影响游戏的正常游玩。
(5)背包系统。该小节要求背包和拾取相交互,玩家可以拾取放置物到背包中,角色可以清楚地获知可用放置物的余量以及是否拾取装备。
1.2 游戏性能需求分析
性能优化是游戏开发过程中不可缺少的步骤,性能优化主要围绕CPU、GPU、内存和程序四大方面进行[3]。开发者不仅要靠考虑游戏的质量,也要兼顾玩家的机器性能水平,不可为了过度地追求游戏的质量而忽略了当前市场上的主机平均性能,NCSOFT公司2004年发行的《天堂2》便是该问题在游戏史上很好的例子,该游戏发布的时候对硬件的要求极为苛刻,导致大部分玩家虽热爱天堂系列游戏却心有余而力不足,无法在自己的PC上流畅运行,最终导致游戏销量惨淡。
就当前课题而言性能优化主要从精简代码、优化贴图方面下手。精简掉多余的繁杂的代码脚本,对游戏场景中的精灵贴图进行适当的处理,使用合适的分辨率。由于该游戏为2D游戏,且游戏整体较小,所以当前硬件水平皆可轻松胜任。
2游戏详细设计
根据上面对游戏功能的划分,游戏需要设计出角色选择,游戏设置及帮助、摄像机跟随系统、背包系统、放置系统、人物角色控制和游戏胜负判定七个功能模块。由于篇幅有限,这里仅给出了角色选择模块的详细设计。该模块将从功能设计和程序设计两个方面对该模块进行详细设计,实现玩家对角色的选择以及界面的跳转。
2.1 功能设计
根据功能需求分析可知,该部分具体功能包括玩家角色的展示,点击选择,界面跳转。具体设计如下:
(1)角色展示设计:玩家可以在界面上看到详细的角色信息。
(2)角色选择设计:玩家通过点击选择合适角色,界面上出现显眼选定标志。
(3)界面跳转:触发跳转进入下一界面。
2.2 类设计
本课题使用两个Button按钮来实现角色的选择。声明两个类OneButton和TwoButton。分别绑定至两个角色按钮上,在角色控制类CharacterController_2D中声明一个变量mantype,以支持判定并为角色赋予不同属性,在按钮方法中调用SetActive()方法对关卡中游戏人物的存在与否进行控制。
3游戏实现
由于篇幅有限,這里仅给出了游戏交互的详细设计与实现[3]。实现过程中,主要调用Unity中封装的类库及预留的接口,使用C#编程语言进行实现。
根据前面游戏功能模块的详细设计,该模块的主要功能是角色的选择。
(1)在Camera Contraller类下声明两个GameObject并命名为One Player和Two Player,改脚本挂载至关卡场景,并将OnePlayer和Two Player绑定至游戏内两个角色。
(2)在Load类下声明两个函数OneButton()和TwoButton(),分别对应两个人物的选择,每个函数中调用两次SetActive()方法,对绑定的两个按钮的背景的Active属性进行更改,以实现两个按钮的选定效果的切换。在函数中声明一个变量man,该变量在OneButton()函数中被赋值1,在TwoButton()函数中被赋值2,以支持角色属性的调整。
(3)在CharacterController_2D类中声明一个变量mantype以判定角色属性,将该脚本挂载至场景中的两个角色,并将mantype在角色的脚本属性中调整为1和2,使用if函数对mantype值的判定并对角色的生命值以及攻击力进行匹配。