1.武汉学院 ,信息工程学院 ,湖北 武汉 430212
摘 要:本论文介绍了一个基于Unity引擎的3D网络游戏的设计与实现的过程。游戏包含客户端和服务器端,玩家可通过游戏进行升级,打怪,管理自己的物品等操作。
关键词:Unity;3D;网络游戏;游戏引擎
The Design and Realization of Online Game Based on Unity
Abstract:
This paper introduces the process of design and realization of 3D network games based on the Unity engine. Contains client and server game, players can be upgraded through the game, play, management operations such as their own things.
Keyword: Unity;3D;Online game;Game engine
1 国内外相关技术的发展现状
自从Unity首次进入人们的视野,其一直保持着飞速的发展状态。在国外,有一半以上的工程师使用Unity进行IOS游戏的开发,而在中国,这一比例还较低。作为一款世界级的跨平台游戏开发引擎,Unity自2012年进入中国以来,越来越受到游戏开发者的青睐。目前,在国内Unity3D制作和专业开发人才面临着巨大的市场需求,并随着移动互联网的发展缺口逐年增大。Unity无疑将有更大发展潜力。
从动画和游戏的发展前景看,实现效果上开始从平面向3D转变。在众多引擎开发平台中,Unity3D异军突起。但是,目前国内Unity3D高级开发工程师不足万人,而市场需求约一百万人,严重供不应求。以熟悉Unity3D游戏技术的游戏开发者为例,Unity3D开发成本低,周期短,市场前景广阔,更是游戏业内值得关注的一个领域。据专家消息,一项关于移动开发人员的调查表明:超过半数的开发者只有1-3年开发经验,接近25%的人开发经验不足一年;而具有3-6年及以上开发经验的高级人才仅占14%。
2可行性研究
对于一款网络游戏项目,可行性研究主要的切入点,在于游戏的发展潜力和可玩性,通过前面的调查我们发现,PC端网游具有玩家基数大,相对稳定的特点,移动端网游则推广速度快,操作简单。所以兼具PC和移动游戏的这款网游一定可以在短时间内,在一定程度上取得成功。
游戏客户端可以使用Unity引擎进行开发,该软件具有开发速度快,灵活,跨平台能力强的特点,可一键将开发好的游戏部署在各种平台中。另外前不久Microsoft公司收购了Unity插件公司,并推出了Visual Studio Tools for Unity产品,这使得开发者可以在Visual Studio下开发Unity游戏,这给开发者带来了极大的便利。
同步在网络游戏中是非常重要的,它保证了每个玩家在屏幕上看到的东西大体是一样的。解决同步问题的最简单的方法就是把每个玩家的动作都向其他玩家广播一遍,这里存在两个问题:1,向哪些玩家广播,广播哪些消息。2,如果网络延迟怎么办。对于第一个问题可根据具体游戏要求很容易解决。而对于第二个问题,有个解决方案,叫预测拉扯,要解决这个问题,首先要定义一个值叫:预测误差。然后需要在服务器端每个玩家连接的类里面加一项属性TimeModified,在玩家登陆的时候,对客户端的时间和服务器的时间进行比较,得出来的差值保存在TimeModified里面。服务器广播消息的时候,就根据要广播对象的TimeModified,计算出一个客户端的CurrentTime,然后在消息头里面包含这个CurrentTime,然后再进行广播。并且同时在玩家A的客户端本地建立一个队列,保存该条消息,只到获得服务器验证就从未被验证的消息队列里面将该消息删除,如果验证失败,则返回A的原始状态。
3游戏设计过程
本游戏中对数据同步具有一定的实时性要求,因为本游戏是一款3D对战网游,对战不进入特殊的战斗场景,需立即将战斗情况同步给其他玩家。举一个例子,玩家控制的角色在释放一个技能时,首先将“释放技能”的信息发送给服务器端,同时客户端进行播放释放技能的动画。服务器端将该消息依此转发给同服务器、同场景下其他玩家,其他玩家里的相关控制器会给实例化出来的角色发送播放技能动画的消息。这样就实现了数据同步的功能。
游戏场景是进入游戏后对游戏最为直观的感受,好的场景效果可以给玩家带来好的游戏体验,所以优美的场景对一款游戏来说是至关重要的。
该游戏是一款3D游戏,场景资源一般比较大,如果一进入游戏就进行所有的渲染则会很费内存资源,如果能够看到哪里就渲染到哪里就可以解决内存资源浪费了。Unity游戏已经已经为我们做好了这些工作,开发者只需要进行相应的设置即可实现效果。
图1 游戏场景示例图
游戏场景示例图如图1所示,在图中包含树木,湖水,木屋,石板地面等物体,各式各样的物体构成了一个立体的世界空间。我们能够看到这些物体,主要是场景中的Camera相机的作用,它的作用就相当于人类的眼睛。
4客户端架构
图2客户端结构图
客户端主要有视图层,逻辑层,网络层等三大模块。其中视图层用来控制物体的显示,人物的各种动作,也包含音频文件的播放等。逻辑层范围比较大,控制了客户端大多数的操作,包含角色的移动,伤害的计算,点击寻路的操作等等。网络层负责与服务器交互,多用于接收服务器端发来的数据,解析,然后交给逻辑层来执行,或者将逻辑层发来的请求转发给服务器端。
为了开发的方便,以及效率方面的考虑,特编写一个Global类来存储或处理全局数据,该类使用单利模式,这样降低了内存中栈的开销。比如时间,网游不能够使用客户端时间进行操作,也不易在每次使用时都调用服务器端的时间(这样做也有数据在网络上传递时延迟性问题),所以在刚进入游戏时,给服务器发送一个获取时间请求,该请求包含发送时的客户端时间,服务器端将根据接受时的时间和客户端发送时的时间新进行时间差计算,同样发回给客户端,客户端进行第二次时间差计算即可获得精确的服务器端时间,并把该时间保存在Global中的NowTime属性中以方便以后使用。
5移动同步的两种方法
5.1实时同步
该方法为只要一个玩家发生了位置的移动,甚至没有移动只是转向,就立马把这个消息发给服务器,服务器立即把该玩家的移动信息发送给该场景下所有的其他玩家。该方法具有较高的实时性,但服务器压力很大,比较适合3D游戏实时战斗并且一个场景中人数并不是很多的情况,比如《穿越火线》这样的游戏。
5.2定时同步
该方法为固定0.5秒或者1秒从服务器端获取一次该场景下所有玩家位置信息,然后客户端根据这些位置信息来显示其他玩家的位置。这种方法对游戏实时性要求不高,可以处理多个玩家的场景,比如《梦幻西游》一个场景中可能就存在1-2万名玩家。
具体处理步骤如下:客户端点击地面触发移动请求。本机角色开始移动,并且将目标位置发送给服务端。服务端接收后,将该玩家的ID,目标位置等相关信息转发给相同场景下其他所有玩家。
其他玩家的Socket管理器接收到服务器发来的消息后,从自身的玩家列表中找到相同的玩家对象,并给该对象一个移动指令,移动目标和原玩家目标位置相同。通过以上处理步骤就实现了实时同步的效果。同样的,角色动作状态,战斗状态等信息也通过这种方法来来实现。
6未来研究与改进
当下,游戏开发技术十分丰富多样,本游戏并不是回合制网游,且对实时性有一定要求,故最终选定使用实时同步的方法来处理其他玩家的位置信息。本文选取了目前最火的Unity游戏引擎作为研发平台,基于具体的游戏需求,进行分析、设计和实现,并抽象出通用的功能,形成游戏框架。然而在开发过程中,由于时间不足等问题,使得该框架还有一些可以提高之处以及一些可以尝试的方案。
参考文献:
[1]Unity 3D虚拟现实游戏开发,计算机教育,2019-05-10
[2] Unity 3D游戏关卡设计实训,计算机教育,2019-05-10,
[3]网络游戏开发的关键技术研究与实现,庞影,辽宁大学,2019-05-01
[4] Unity3D游戏场景中人物角色动画的设计,段薛孔;李潼;朱旭东;吴兰术,电脑知识与技,2019-03-25
[5]AR技术应用于初中地理教学的探索与研究,张道婷;王泽华;张婷,科技资讯,2019-03-23
[6]3D游戏开发技术设计与应用探析,石静泊,计算机产品与流通2019-03-15
[7]游戏引擎教学版软件的开发研究,娅萌;王志娟;王茜,计算机产品与流通, 2019-03-15
基于Unity 3D异星大冒险游戏的设计与开发,田琴货,陈玉明,中国现代教育2019-01-28
探讨基于Unity 3D游戏开发流程,邓华丽,电脑编程技巧与维护,2018-07-18
基于Unity3D FPS游戏开发,胡磊,电脑迷,2018-06-21
魏其成,男,湖北省襄阳市,生于1998年10月,在读于湖北省武汉市武汉学院信息系软件工程1703,研究方向:游戏客户端开发。