Unity引擎下多人在线网络游戏设计及开发
2022-09-09王骏
王骏
(北京江娱互动科技有限公司 北京市 100029)
本文的服务器的相关资源统一部署在公有云提供商的云环境上,数据存储使用Mysql和Redis,服务器端使用Java语言在Eclipse集成环境内开发。而客户端采用Unity3D引擎,支持手机等移动客户端,也支持PC(Personal Computer)端。游戏内通过通信协议建立、UI框架设计、以及丰富的NPC应用等,进而满足了玩家的娱乐需求。
1 游戏设计
1.1 游戏背景
游戏背景设定为末日生存的动作角色扮演游戏,其创作理念来源于《爱丽丝梦游仙境》,是一款经典的通关性游戏,玩家通过穿越的方式来到不同的场景,面对各种挑战,以末日生存的方式拯救世界,迎接僵尸、死士等敌方的进攻。在此游戏之中,受资源、天气、野兽、敌国等影响,需要玩家从零开始收集物资、建设房屋、制作工具与武器、提升自身的生存能力,并与队友一同战斗。玩家在游戏之中的游戏发展线设定方面,以以设计线路图的形式解锁,在玩家某一关卡通关之后,会前往下一个世界,展开新的战斗。
1.2 游戏功能
游戏功能的核心设计主要包括如下几个部分:
(1)账号管理系统:新玩家首先要进行注册,并且可以选择与自己的相关社交账号,比如微信账号、QQ账号、微博账号进行绑定。这样在下次登录的时候可以直接选择社交账号登录。玩家的注册信息将被存储到数据库中,未绑定社交账号的玩家会把玩家的客户端设备唯一标识与游戏内的账号进行绑定映射,从而下次用该设备登录的时候能够直接登录之前注册的账号。注册成功后,在登录界面输入玩家信息进入游戏。受我国国家法律影响,设计之中需要用户完成实名认证才能够完整的体验游戏的所有内容。
(2)战场管理系统:玩家登录成功后,可以看到自己账号所属大区内已经创建好的场景列表,然后可以通过点击加入按钮进入场景。由于每个场景有自身的游戏进度限制,若未达到相应等级则无法解锁,可选择其他场景加入。反之加入成功,显示加载进度条,等待游戏开始。玩家可以根据自身实际情况选择是否加入场景,是做普通的任务还是做难度较高的升级任务。
(3)NPC系统:游戏内除了玩家自己和其他在线玩家之外,还有很多NPC可以与玩家进行交互、战斗。这些NPC的设计有多种形态,比如丧尸、僵尸、死士、怪物、幸存人类等。NPC会根据游戏剧情来触发,由程序设定,他们可能会在地图上巡逻,与玩家对话,还可能与玩家发生战斗,在战斗中会攻击、躲避、释放技能等,从而提升游戏的真实感。战场场景的进入需在特定时间段或是特殊任务执行之后开启。
(4)玩家操控系统:由于游戏支持手机移动设备和PC设备,在这两类设备上玩家对游戏的操控是不同的。在移动设备上,游戏界面会提供虚拟十字控制键和按钮控制键,玩家通过对应的虚拟按键来对游戏人物进行控制。在PC上,玩家操作主要是以鼠标来控制方向,键盘上的按钮来控制功能。在游戏内,玩家可以制作装备,升级技能,并发生战斗,在战斗中可以通过动作控制来与敌人进行攻防战,释放角色技能,使用道具等操作。
(5)界面特效系统:为了提升游戏的整体画面感和沉浸感,利用了Unity3D引擎的优势,当玩家遇到特殊事件、NPC,以及战斗过程中都设计了大量的特效或者音效,尽量做到给玩家带来身临其境的感觉。
1.3 系统整体架构
游戏系统整体架构主要分为客户端和服务器端两个部分,具体内容包括:
(1)客户端:数据管理系统、界面管理系统、资源管理系统、网络管理系统。本游戏由于需要支持手机、平板等移动设备以及PC,仅对于手机而言,还有Android、IOS等不同手机操作系统,因此对不同客户端类型的兼容和界面的适配就显得尤为重要。Unity3D引擎提供了对应的解决方案,从而使得游戏开发变得更加轻松,并能让游戏具备良好的实用性。相关的美术资源、模型等在集成之后导入到Unity3D中,从而完成游戏场景的搭建。
(2)服务器端:账号管理系统、战场管理系统、地图系统、玩家数据系统、战斗系统、NPC系统和网络通信管理系统。各个系统模块设计尽量相互独立,低耦合,从而便于后期的维护和扩展。
1.4 游戏设计难点
服务器端的设计是本游戏的设计难点,服务器端的架构需要考虑游戏的稳定性、可伸缩性和扩展性等几个方面。游戏的服务器资源都部署到了云环境中,这样能大大降低运维的维护成本,业内优秀的云厂商的SLA(Service Level Agreement)也保证了其可以稳定的运行,并且部署到云环境中可以让服务器的相关资源随时能根据游戏运营情况来动态伸缩,云环境丰富的第三方服务也有益于扩展整个服务器的业务能力。服务器由于采用Java语言开发,通过JVM(Java Virtual Machine)它可以部署到任意操作系统类型上,可以是Windows、Linux或者Unix等。
服务器端可以分为一个分发总控服务器和多个战场服务器。分发总控服务器主要包括账号管理系统和战场管理系统,其对玩家的账号信息和战场服务器进行统一管理。玩家每创建一个战场就会分配一个战场服务器,战场服务器就是一个游戏逻辑服,它负责当前战场内相关数据的存储和消息的处理与转发。这里的战场服务器是一个虚拟服务器概念,可以理解为一组虚拟服务器的资源,在云环境中它能以服务器容器的形式存在,比如每个战场服务器就是一个Docker服务器容器。图1为服务器端系统结构图。
图1:服务器端系统结构图
图4:NPC动画状态机
2 关键技术及系统实现
2.1 网络通信协议
网络通信协议是一种网络通用语言,为连接不同操作系统和不同硬件体系结构的互联网络来提供通信支持,是一种网络通用语言。一般由语义、语法、时序三个要素组成,其中语义表示要做什么,语法表示要怎么做,时序表示做的顺序。这里的通信协议主要定义的是客户端和服务器端之间的网络通信协议,由于本游戏是ARPG这种动作类的游戏,因此使用UDP(User Datagram Protocol)协议来进行网络传输,可以有效的降低网络的延迟,保证游戏的实时性。客户端和服务器端的数据传输通过Google Protobuf将格式化的数据转换成二进制的格式来传输,减少了格式化数据序列化和反序列化的时间消耗,并且可以加密和压缩传输,提高数据传输效率。
在本游戏中,网络通信协议中格式化的数据被定义成了两种格式:
(1)客户端向服务器端发送的格式化数据定义如下:
Length Type Code Data
Length:协议的长度,以字节byte为单位。
Type:请求类型,本游戏有三种请求类型,分别是账号数据类型请求,战场数据类型请求和游戏逻辑数据类型请求。
Code:每个编码对应于服务器端定义的一个功能接口编号,服务器端通过编码映射关系来找到具体的功能实现。
Data:客户端调用服务器端功能接口的具体参数数据,可以是JSON(JavaScript Object Notation)格式的字符串然后加密转换的字符串格式。
(2)服务器端向客户端发送的格式化数据定义如下:
Length Code Data
Length:协议的长度,以字节byte为单位。
Code:请求接口编码。
Data:服务器端返回给客户端的结果,可以直接是JSON字符串,也可以选择加密转换。
比如,客户端向服务器端发起一个玩家登录游戏的协议请求,其中Type是账号数据类型1,Code是登录协议101,Data为玩家的账号信息,比如设备信息以及包含绑定的第三方社交账号的相关信息等。当服务器端接收到该请求后,解析Data中的相关信息然后查询存储在数据库中的账号系统数据,如果找到匹配数据后,就返回Success给客户端,否则返回Fail表示登录失败。客户端接收到服务器端的返回结果,如果从返回数据中解析到的是Success,则表示登录成功,进入到战场选择界面,否则弹出登录失败的提示。其时序图如图2所示。
图2:登录请求的客户端与服务器的通信时序图
2.2 UI 框架设计
UI框架设计主要包括内容为:人机交互、玩家操控系统、界面设计。
高质量的UI设计可以提升游戏的可玩性,使游戏变得更加有趣,玩家的黏性也能有效提升,且受众也会因为其操作的灵活度、爽点等来主动下载。因此,一个优秀的UI设计,不仅会让玩家的体验感获得提升,也能充分地表达设计者的游戏设计思路,其就像一个大纲一样,使游戏设计内容及思路能固定在一条线上,承担起游戏设计的中心点。
本游戏的UI框架设计方案主要为:
(1)每个界面定义成一个面板,每个面板对应一个Panel类来实现面板的具体功能。每个面板通过动态加载资源,然后进行实例化。
(2)所有的Panel类都继承一个面板基类BasePanel,在这个面板基类中定义了path和layer这两个成员变量,以及onInit、onShow和onClose这三个方法。path变量表示该面板的资源路径,系统会根据该路径动态加载资源管理系统内的相应界面资源。layer变量代表该面板的层级,通过设置优先级来确定各面板的上下级关系。onInit和onShow这两个方法主要是做一些初始化的操作,比如添加按钮事件监听、网络消息监听等。例如登录面板的onShow方法就会初始化登录按钮组件,之后添加登录按钮的事件监听,当玩家点击登录按钮时,向服务器发送登录协议请求。onClose方法是在面板被关闭的时候被执行,该方法会对界面资源进行释放,取消网络监听等。
(3)面板管理器PanelManager类来控制界面的显示和关闭,其中open和close为两个最主要的方法。当PanelManager的open方法被调用时,其会依次调用对应panel类的onInit和onShow方法。当close方法被调用时,其会依次调用对应penel类的onClose方法。除此之外,PannelManager类中的panels成员变量是一个Map数据结构,用来保存已经打开的panel对象列表,当打开一个界面中的面板时,如果之前已经打开过该面板会在panels中找到该panel对象,如果没有找到,则创建新的panel对象并添加到panels中,一个界面被关闭销毁之后也需要将其从penels中移除。PanelManager类的layers成员变量是维护每个panel的层级列表。图3为面板相关类图。
图3:面板相关类图
2.3 NPC设计
NPC是游戏设计之中必不可少的部分,其存在可以有效提升玩家的刺激性心理,激发出玩家的挑战欲望。目前游戏之中设计了两种攻击类的NPC,分别是普通丧尸Zombie和怪物头目Boss,其二者在动画状态机的设计上一致的,只是在属性的强弱,动画表现的复杂度等有所差异。
2.4 系统特效
游戏是否成功与特效有着紧密地联系,华丽炫酷的特效对于游戏情景的营造有着重要影响,其具体包含场景特效与人物技能特效。每种特效都是由多个特效效果组合而成的。本游戏利用Unity3D引擎来制作了大量的特效,比如场景特效中的火焰、烟雾,人物技能特效中的爆破、扫射等特效。
2.5 游戏运行及操作控制
本游戏的客户端可以在PC和移动设备上运行,总体来说对处理器和内存的要求不算太高,但是由于设计了很多特效,对GPU的硬件有一定的要求。
(1)PC端的运行需求如表1所示。
表1:PC端游戏运行需求
(2)而对于移动设备而言,游戏运行需求如表2所示。
表2:手机端游戏运行最低需求
游戏的操作在PC端和移动端也有所差异:
(3)PC端:鼠标控制方向,键盘上的W、A、S、D是控制的通用键,Q、R、T 是人物技能键,B为背包键。
(4)移动端:在界面上提供虚拟十字键盘和虚拟按钮来操控
3 结束语
综上所述,本文主要针对Unity引擎下多人在线网络游戏设计及开发展开研究,主要研究内容为游戏功能、系统整体架构、游戏设计难点、关键技术及系统实现等方面内容。同时在基础的系统设计之中保证设计内容和优化游戏显示效果,从而提升玩家的游戏体验感、情景感等。