多人在线角色扮演游戏《地狱天使》的设计与实现

2019-03-07 05:22彭伟国刘玉坤
电脑知识与技术 2019年35期

彭伟国 刘玉坤

摘要:随着人们的生活节奏加快,工作压力不断增大,越来越多的玩家通过RPG游戏释放压力;《地狱天使》RPG游戏开发框架包含功能视图层、功能模块层、功能底层,是一款支持多人在线的角色扮演类游戏。

关键词:Unity3D;RPG;对象池;事件分发

中图分类号:TP37 文献标识码:A

文章编号:1009-3044(2019)35-0070-02

1 背景

角色扮演游戏(Role-playing Game,PRG)是网络游戏类型之一,用户在游戏中负责扮演特定角色在一个写实或虚构世界中活动[1]。根据第一手游网10月17日开服情况来看,手游开服193组,其中PRG游戏就有112组,可见PRG游戏的受欢迎程度。游戏的开发过程一般都经过游戏策划、游戏美工设计、游戏功能实现、游戏测试等重要环节。

2 游戏策划

2.1游戏故事背景

突然有一天,来自地狱的怪物统治了虚拟角色所在的小镇,危机前所未有,小镇里的人们向游戏主角发起了求助,期望出现一个战斗天使,带领小镇的人们走出地狱,回归正常生活。

2.2游戏规则

首先,玩家只有注册账号并且登录游戏才能继续进行游戏,游戏中的两大模块为闯关模式和网络对战模式。玩家想要变强,要通过闯关模式,击杀关卡里的所有怪物,来获得关卡奖励,奖励会有装备奖励,玩家装备更高等级的装备使自己变得更强大。玩家强大之后,可以参加网络对战模式,和其他玩家战斗,谁的血量先变为0,则另外一方获得胜利,获得胜利的一方,会增加相应的竞技分数。

2.3游戏功能需求

经过对游戏玩法的分析,该游戏中需要有以下功能:注册与登录功能、角色选择功能、游戏关卡功能、资源管理功能、角色控制功能、技能管理功能、任务管理功能、装备管理功能和网络对战功能。

3 RPG游戏开发架构

本游戏遵循“高内聚低耦合”的开发思想,借鉴王异帆[2]手机游戏框架分层,提出RPG游戏开发框架应包含功能视图层、功能模块层、功能底层,如图1所示。该三层架构的业务流程如下:

1)功能视图层根据用户的操作发送指令给功能模块层;

2)功能模块层收到功能视图层发出的指令,对操作的合法性的信息进行验证,然后向功能底层发出对数据访问的操作;

3)功能底层收到功能模块层发出的指令后对数据做验证,并且将结果返回给功能模块层;

4)功能模块层对收到的数据进行验证,验证完成后将结果发送给功能视图层。

功能视图层主要是展现给用户的游戏交互界面,也就是客户端的显示,该层主要包含UI事件分发管理、输入管理、场景管理、界面管理、角色管理等。

功能模块层主要是游戏中一些业务逻辑,是功能视图层和功能底层之间的桥梁。针对功能视图层的请求,对数据进行处理然后返回给功能视图层显示。

功能底层是对数据的操作,主要与数据库打交道。将存储在数据库中的数据提交给功能模块层,同时将功能模块层处理的数据保存到数据库。

4 游戏美工设计

游戏美工设计主要包含游戏UI设计、角色设计和游戏场景设计,对应于三层开发框架的功能视图层。4.1游戏UI设计

UI设计是通过NGUI插件在Unity游戏引擎中实现的,包含资源加载界面、注册登录界面、选择服务界面、选择角色界面、游戏主界面、游戏关卡界面、竞技界面、任务界面、装备界面、战斗界面。

首先需要先创建UI管理类,对游戏中的所有UI进行统一的管理,创建UIManager类,首先在该类中创建LoadAllWindows方法,该方法加载Resources/UI路径下的所有UI面板预制体,然后在该类中创建ShowWindows方法,该方法根据传递的面板名字,显示相对应的UI面板;最后创建HideWindowsByName方法,该方法根据传递面板名字,隐藏对应的UI面板。

各个UI界面宽高比统一设置为1280*720像素。每一个UI界面的实现,其Unity层级面板中包含的控件元素不同,按照UI设计实现效果组合并设置控件的属性和参数。比如,装备UI界面就包含有UIPanel、UISprite、UILabel、UISprite、UIButton等控件,最终UI实现效果如图2所示。

4.2游戏场景设计

本游戏中有四个场景,每个场景关卡中都拥有树木、房屋、花草等物品,树木与花草等模型使用外置资源包,房屋模型建筑使用Maya软件制作。先通过Unity自带的Terrain地形工具先搭建地形轮廓,然后对地形做一些细节的调整,然后种植一些树木,并将房屋等装饰摆放到场景中。

各个场景之间会进行相互的跳转,为了方便统一的管理使用了场景管理类,创建SceneManager类,首先在该类中创建LoadScene方法,在该方法中,根据传递的场景名字找到Scenes路径下对应场景文件,然后显示加载界面UI,再使用LoadAsync方法,异步加载场景,并且在加载界面中显示出加载进度。

5 功能模块设计

本游戏采用模块化的设计思想对功能进行拆分,用户可以通过控制角色进行闯关和网络对战;用对象池技术,降低游戏性能的消耗;开发过程中采用单例设计模式和观察者设计模式,使其满足“高内聚、低耦合”的需求。实现的游戏功能包括注册与登录、游戏关卡、资源管理、角色选择、角色控制、技能管理、任务管理、装备管理、网络对战等。下面仅以技能管理功能的设计与实现为例进行介绍。

技能管理作为基础功能,将与战斗、装备三大系统为角色戰斗提供全部逻辑功能。技能管理本质上是,提取“技能配置数据”,执行“技能执行逻辑”,得到“技能效果”,循环“技能效果”,修改目标角色属性或调用相应API。游戏技能以配置表的方式将技能抽象出来,在实际的战斗过程中,根据配置表进行一些数值的计算、界面的显示和动画的播放。

技能管理功能的实现上,编写SkillBar脚本,并且注册On-ButtonPress和OnButtonClick事件到普攻和技能按钮上。OnBut-tonPress用于实现普攻消息分发,OnButtonClick用于玩家点击释放技能。SkillBar脚本中的Update方法内实现技能冷却。在满足释放条件之后,调用GfxSkillSystem类的StartSkill方法,施放技能,并将角色的状态发送给服务器。服务器通过网络协议收到客户端的发来的数据时,判断此时玩家是否可以释放技能。

6 功能底层设计

6.1服务器管理设计

服务器管理设计主要是对服务器逻辑的管理,采用不同的进程进行逻辑的处理,分为网关服务器、数据存储服务器、逻辑服务器、房间管理服务器和登录服务器,不同的服务器通过进程间的通讯进行访问,客户端直接与网关服务器和登录服务器交互,客户端的其他操作由网關服务器进行转发,从而使服务器之间的各个模块独立化,客户端与各个服务器之间的交互如下图4所示:

6.2日志管理设计

在开发的过程中会出现各种未知的错误或者警告;随着项目开发的越来越大,后期修BUG是非常困难的,所以在正常的开发中要经常打印一些关键的日志,为以后查找问题提供便捷。在设计日志管理的时候,将打印的日志进行分类,有不同的等级,方便后期进行筛选,而且在打印日志时,要详细说明做了什么操作,这对监控我们整个项目的运行起着非常重要的作用。

6.3数据库设计

本游戏采用Mysql数据库进行开发。经过对此游戏中数据的分析和对角色信息进行抽象,本游戏需要四张数据表才能实现相应的功能,分别为:账号数据表、角色数据表、装备数据表和技能数据表,然后根据具体的功能需求,设计数据表中相应的字段。

7 游戏测试

界面是游戏的“脸面”,玩家的所有交互行为几乎都与界面有关,界面好坏是玩家对游戏评价最重要的标准之一。另外,还要检测游戏中各个UI界面是否正常适配。功能测试通常也叫作黑盒测试或数据驱动测试,对各个功能模块进行测试。表1列举了网络对战功能测试信息。

8 结束语

本游戏具有网络实时交互的特点,玩家之间可以进行实时战斗,是一款支持多人在线的角色扮演类游戏。在游戏制作过程中,对服务器模块进行拆分,提高服务器的运行效率;采用事件分发机制降低代码的耦合性等。

参考文献:

[1]袁科,高启文,闫永航.基于Unidy3D的角色扮演游戏设计与实现[J].软件导刊,2019,8(8):75-78.

[2]王异帆.基于Cocos2d_x游戏引擎的塔防类手机游戏框架设计与实现[D].武汉:华中师范大学,2015.

【通联编辑:谢媛媛】

收稿日期:2019-10-19

作者简介:彭伟国(1983-),男,河南宜阳人,讲师,硕士,研究方向为数字媒体技术应用;刘玉坤(1978-),男,河南通许人,讲师,硕士研究生,研究方向为信息安全、计算机应用。