基于某Unity3D的飞机大战游戏开发.docx
《基于某Unity3D的飞机大战游戏开发.docx》由会员分享,可在线阅读,更多相关《基于某Unity3D的飞机大战游戏开发.docx(37页珍藏版)》请在冰豆网上搜索。
基于某Unity3D的飞机大战游戏开发
摘要
Unity3D是由UnityTechnologies开发,可以让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。
Unity的编辑器运行在Windows和MacOSX下,可发布游戏至Windows、Mac、iPhone和Android平台也可以利用Unitywebplayer插件发布网页游戏,支持Mac和Windows的网页浏览。
它的网页播放器也被Macwidgets所支持。
本课题是基于Unity3D的飞机大战游戏开发,利用Unity3D系统和C#语言开发,实现了简单的飞机大战游戏。
主要的功能模块如下:
提供背景的循环播放模块,提供敌机的孵化器类模块,提供玩家战机的类模块,主界面模块,游戏奖励类模块,包括超级子弹和导弹,游戏控制模块,包括检测子弹与敌机碰撞,检测敌机与玩家战机碰撞木块,游戏的暂停、播放功能,其中玩家战机还添加了一个血条,玩家战机可以被敌机打中四次才死亡,可以让新手更好的试玩游戏,除此以外还为用户提供更加人性化的设计和方便人员的操作流程。
游戏还有很多需要完善和扩充的地方,比如可以做不同的模式,多关卡模式或挑战模式。
也可以做成多人模式和小伙伴一起玩,游戏的界面也可以补充的更加完善,包括音乐、设置、帮助和商店等模块。
后期还需要更加努力去完善修改自己的游戏
关键词:
游戏开发;飞机大战;移动端;单机;碰撞检测;脚本语言
ABSTRACT
Unity3DdevelopedbyUnityTechnologies,allowsgamerstoeasilycreatesuchcomprehensivethree-dimensionalvideogamedevelopmenttools,games,architecturalvisualization,real-timethree-dimensionalanimationandothertypesofmulti-platforminteractivecontent,isafullyintegratedprofessionalgameengine.UnityEditorrunsunderWindowsandMacOSX,youcanpublishyourgametoWindows,Mac,iPhoneandAndroidplatformcanalsousetheUnitywebplayerpluginreleasedwebgames,supportforMacandWindowswebbrowser.ItsWebPlayerMacwidgetsarealsosupported.
ThispaperisbasedonUnity3Daircraftwargamedevelopment,utilizationUnity3DsystemandC#language,toachieveasimpleairplanewargame.Themainfunctionmodulesareasfollows:
toprovidebackgroundloopmodulewhichprovidestheaircraftincubatorclassmoduleoffersplayersfighterclassmodule,themaininterfacemodule,thegamerewardsclassmodules,includingsuperbulletsandmissiles,thegamecontrolmodule,comprisingdetectingbulletcollisionwiththeenemy,andtheplayertodetectenemyaircraftcollisionblock,pausethegame,theplayer,inwhichtheplayerwarplanesalsoaddedahealthbar,theplayercanbeenemyaircrafthitfourtimesbeforedeath,allowingnovicesbetterdemogames,inadditionalsoprovidesuserswiththeoperationprocessmoreconvenientanduser-friendlydesignstaff.
Gameshavealottoimproveandexpandtheplace,forexample,candodifferentmode,multi-levelmodeorchallengemode.Multiplayermodeandcanalsobemadesmallpartnertoplaywith,thegame'sinterfacecanalsoaddmoresophisticated,includingmusic,Settings,Help,andshopsandothermodules.Latealsoneedtoworkhardertoreviseandimprovetheirgame.
Keywords:
GameDevelopment;AircraftWar;MobileTerminal;Single;CollisionDetection;ScriptingLanguage
1绪论
1.1课题的背景与意义
随着技术的发展和进步,智能手机的性能越来越强大,其市场占有率也在持续快速增长。
到目前为止人类已经迈入了智能手机的时代。
智能手机给人们的生活带来的改变是全方位的,过去人们对手机的需求大体上只是打和发短信等基本通信功能。
现在情况则完全不同,相比于传统手机,智能手机更像是一台手持的小型电脑。
除了基本的通讯功能,它还能供用户进行网络访问、社交、阅读、观看电视电影和玩游戏等过去在家用电脑上完成的活动。
智能手机市场的急剧扩带来的不仅仅是手机出货量的增长,同时还促进了手机应用软件市场的繁荣。
各种类型的APP层出不穷,到2015年初苹果系统的应用数量为121万款片[1]。
而占据移动市场大半份额的安卓系统,其应用商店GooglePlay中的应用总量也早已超过了143万。
考虑下载量,则数据更加客观。
苹果应用商店截止2015年1月的应用总下载量超过750亿,每周访问量达到了3亿次。
而同一时期谷歌则声称搭载其安卓系统的手机出货量达9亿,安卓应用的总下载量也与苹果基本持平。
目前,全世界每秒钟都有成千上万的应用被下载,同时每天仍有数千款iOS和Android新应用源源不断地进入相应的应用市场[2]。
手机应用种类繁多,其功能和特点也各不相同。
常见的应用种类包括游戏、新闻、杂志书籍、视频娱乐等,这其中占比例最大的是手机游戏。
据国外2013年1月统计的苹果AppStore应用分布数据显示,在线的iOS应用数量为552,247,其中超过17%的应用是手机游戏,数量达95,324。
国的移动应用下载统计数据也显示,在2013年第三季度所有的应用下载种类中,35.6%的下载量是游戏贡献的,这个比例是排名第二位的社交应用的两倍多。
2015年全球游戏市场总收入达到854亿美元,移动端、PC端、Mac端、主机端以及掌机的收入分别为348亿、290亿、185亿和30亿美元。
手游的全球总收入比端游多出20%,是全球市场份额最大、游戏体验总时间最长、收入最高的游戏平台——更重要的是,这个领先优势还在不断扩大。
移动分析机构AppAnnie最新研究报告预计,2016年全球应用商店总收入将增长24%达到510亿美元,而到2020年全球应用商店营收将超过1010亿美元。
AppAnnie预计到2020年移动游戏营收将达到746亿美元。
到今年上半年就来自应用商店的总收入而言,中国将超过美国。
而就下载量而言,中国在2015年年初就已经过美国。
我国手机游戏市场依然会保持高速增长和持续繁荣。
Unity3D游戏引擎占有目前游戏引擎市场最大的份额,很多国外开发团队利用Unity3D引擎制作出精良的游戏。
Unity3D引擎作为一个发展迅速的游戏引擎,很适合中小团队[3]。
因此,在国外团队利用Unity3D取得很好成绩的同时,国也加快了Unity3D的学习和发展,目前Unity3D在游戏领域发展迅猛[4],需要大量的专业人才。
飞机大战是一款休闲类游戏。
游戏采用商业游戏引擎Unity3D实现快速开发,以节省开发时间,提高开发效率。
该游戏基于传统的PC端动作休闲游戏,结合智能手机上优秀的触控和显示,同时加入了血条,给玩家主机增加了新的生命值,大大提高了游戏的趣味性,很适合新手玩游戏,能吸引很多小朋友和女性用户下载试玩。
1.2国外的发展状态
当前全球手机游戏行业的领导者依然是美国,这一点和传统游戏市场的格局是一致的。
另外从市场产值来看,日本和韩国也扮演了重要的角色[5]。
这几个国家的手游行业不论从技术还是美术方面都处于领先地位。
由于用户基数大、市场潜力不可估量,我国手机游戏产业在经历了十几年的发展后也在快速地走向成熟。
本文仅从手机游戏涉及的几项关键技术对当前业界的研究情况进行概述:
(1)游戏动画效果
视觉感官效果,直接决定游戏的可玩性,游戏的一切容最终都要通过视觉展示传达给玩家。
逼真的动画效果、流畅的角色动作对于手机游戏的质量至关重要。
传统的PC端和家用机游戏动画技术比较成熟,而手机游戏受硬件条件制约,动画技术还有很大的提升空间。
2D手机游戏采用的较多的仍然是精灵动画技术,即逐帧播放动画序列图;3D手游在精灵动画的基础上,还发展出来了刚体分层动画和骨骼动画等技术[6]。
(2)物理碰撞检测
碰撞检测决定了游戏中各种元素的即时交互响应,具体实现中不能单纯为了满足碰撞形体的逼真而一味使用复杂的碰撞体模拟。
对于手机游戏来讲,性能上的考虑尤为重要。
一旦游戏元素增多,实时检测碰撞事件就会带来巨大的计算消耗。
2D手机游戏中物体基本上可以视作面片,检测起来相对容易一些,最常用的碰撞近似处理包括矩形近似和圆形近似两种。
某些特定情况下还可以使用像素值来进行碰撞分析[7]。
但是3D游戏中,情况就复杂的多。
目前业还没有十分理想的3D碰撞检测方案。
(3)游戏引擎技术
当前手机游戏市场竞争十分激烈,为了加快游戏开发速度,提高开发效率并且避免重复进行一些基础功能模块的开发,使用一款合适的引擎是非常重要的[8]。
游戏引擎提供了特定类型的游戏开发所需的通用架构,以及游戏中的各种资源、场景和数据管理机制,集成常用的物理、动画、音效、粒子特效和脚本等功能[9]。
目前考虑到游戏平台的多样化,跨平台开发的功能对游戏引擎也越来越重要。
有关本文的游戏开发引擎Unity3D主要做以下介绍:
Unity3D是一款商业引擎,发行公司是美国的UnityTechnologies。
Unity3D最初是由一批游戏引擎技术爱好者创立的实验性项目,一开始只针对苹果的Mac平台。
后来随着项目的发展和完善,Unity3D支持的平台越来越多,包括Mac、Windows、Linux、iOS、Android等几乎市场上常见的全部游戏平台。
除了跨平台之外,Unity3D最大的优势就是其可视化的编辑环境。
“所见即所得”在Unity3D上得到了最大程度的体现。
在其编辑器中,几乎一切游戏元素都可以被视为“物体”或者是资源。
这些资源包括游戏中的贴图、材质、声音、场景、角色、动画等[10]。
除了静态的资源管理,Unity3D还支持Prefab特性,可以将游戏角色甚至整个场景制作成类似于模板的物体,然后在游戏运行代码中动态生成该物体。
这就十分利于游戏的快速开发,使游戏创作的过程更加简便。
开发者可以将精力更多的集中到游戏规则本身,而不是繁杂的底层资源管理。
Unity3D还是一款综合型的游戏引擎。
使用它开发的游戏并不会被局限在某些特定类型,比如第三人称射击、即时战略、角色扮演等。
除了游戏开发之外,Unity3D还为虚拟显示技术提供了强大的支持。
引擎本身的功能十分齐全,实时渲染、动画组件、物理引擎、粒子效果、网络功能、脚本编辑和运行等功能均有十分完善的支持。
基础的Unity3D版本是免费的,免费版支持绝大部分引擎功能,对于某些高级特性如缓存服务器等[11],用户则需要购买Unity3D的Pro版本,费用是1500美金。
这个价格远低于Unreal等传统的商业引擎动辄数十万美金的授权费用,所以对于小团队和独立开发者是相当大的利好。
另外值得一提的是,Unity公司还为引擎的使用者提供了一个网上商城AssetsStore。
该商城的商品种类繁多,包括游戏开发中所需的网格模型、2D或者3D纹理、材质、游戏音频、UI贴图,以及各种方便开发的引擎插件如UI插件、网络插件、资源管理插件等等,部分资源还是免费的。
开发者既可以在商城购买这些游戏资源,又可以在商城上传并出售自己开发的相关资源商品。
初学者还可以在商城购买到一些项目工程资源或者游戏原型,这对于提高开发水平有很大的帮助。
合理利用商城里的资源,可以有效减少项目的工作量,节省游戏开发的时间。
对于人力资源比较有限的团队,AssetsStore是非常值得关注的地方。
2系统需求分析
2.1功能需求
“飞机大战”是一款基于Unity3D引擎和C#脚本开发的休闲游戏[12],可以发布PC端,也可以发布到移动端Android或iOS,在手机上玩,简单方便。
游戏舍弃了关卡的概念,加入了游戏排名,是玩家可以不断挑战自己,增强了游戏的可玩性。
游戏的主要功能如下:
(1)游戏界面
玩家对一款游戏的第一印象,就是游戏的画面感觉。
游戏界面的优劣直接决定手机游戏的成功与否。
游戏运行中,屏幕上的一切元素都可以归结为界面。
界面最主要由三点组成:
UI、角色形象和游戏背景。
“飞机大战”作为一款针对年轻人的游戏,要求游戏界面的整体风格动感明快,此外,游戏的界面要能适应屏幕尺寸的变化,以及适应各种不同类型手机的屏幕。
(2)操作方式
传统的PC端游戏和家用机游戏主要依赖于键盘、鼠标和游戏手柄进行操作,
而智能手机缺少这类辅助硬件,只能通过尺寸有限的触摸屏来完成所有操作。
作为休闲类游戏,要求操作方式的复杂度尽量小,用最简单的操作就能操作游戏,而且要尽量符合常规的操作方式[13]。
“飞机大战”的操作简单明了,点击屏幕中的玩家战机就可以完成全部的操作。
(3)物理规则
对于一款动作类游戏,如何设定整体的物理规则十分关键。
该类型游戏中,游戏角色大部分时候都会在玩家的控制下进行各种形式的运动,如跳跃、奔跑等。
同时还会与游戏中的“敌人”或其他中立物体发生碰撞。
为了使这些运动和碰撞更加符合玩家的直观感觉,就要求游戏能够尽量地模拟现实中的物理规律[14]。
比如跳跃时的加速度,碰撞后的反弹等。
当然,某些时候为了增强游戏的可玩性,也不用完全死板的照搬真实世界的规则。
这就需要设计者合理的权衡利弊,做出取舍。
碰撞检测一直是游戏开发中需要着重考虑的技术要点,不同类型和规模的游戏对碰撞算法的要求也不同[15]。
“飞机大战”本身是一款2D轻量级游戏,元素的形状比较规整,所以对碰撞检测的最核心要响应准确、性能消耗低。
2.2性能需求
游戏的时间特性:
在软件方面,要求响应时间和更新处理时间都比较快,且时间设定都合理,软件都能及时触发相应的操作。
操作的灵活性:
在游戏的时间特性上,要求响应时间和更新处理时间都比较快,且时间设定都要合理,软件都能及时触发相应的操作。
游戏的娱乐性:
游戏要求娱乐性较高,玩家可以运用道具等来增加游戏娱乐性,同时有背景音乐,同时还能触发震动效果,使得游戏的运行效果更加震撼。
2.3友好的用户界面
本游戏是直接面对用户的,要求游戏能够提供良好的用户接口,易用的人机交互界面。
要实现这一点,就要求软件应该尽量使用用户熟悉的术语和提示消息。
针对用户可能出现的使用问题,要提供足够的提醒帮助功能,缩短用户对软件熟悉的过程。
一个好的功能强大系统,必须要进行完善而且全面的系统分析和友好设计。
本项目中,之所以能够有计划地进行下去,的确也是缘于良好的系统分析,如若省略这一步直接编程,那难度必然加大,以至于在编程过程中又不得不回过头来进行系统分析,此时必然拖慢进度,打乱整个系统逻辑,其最终的成品也充满变数。
本系统在性能功能上应达到如下需求:
(1)操作简单、界面友好:
完全控件式的页面布局。
(2)游戏的安全性,正在游戏中对可能发生的突发事件做出处理。
(3)软件的响应速度要快,保证用户不会应为等待反馈时间过长而放弃本软件。
(4)软件的可靠性,能够真正的带给游戏者乐趣。
(5)在结构上应具有很好的可扩展性,便于将来的功能扩展和维护。
根据以上功能,该系统主要以Unity3D为操作平台,它提供了很大的自由空间,采用C#为开发语言,使系统开发更加方便快捷,本软件的目标即为成功、完整的体现该系统,让客户满意。
3系统设计
3.1概要设计
系统的概要设计主要是针对系统的总体功能如何设计,如何划分模块,系统的数据库如何设计进行研究。
它为系统的详细设计做铺垫。
在系统的设计过程中起着非常重要的作用[16]。
系统设计是信息开发过程中的另一个重要阶段,在这一阶段中将根据前一阶段逻辑分析的结果,在系统分析报告的基础上,按照逻辑模型的要求,科学合理地进行新系统的设计。
系统设计包含两个方面:
首先是总体结构设计,其次是具体物理模型的设计。
这个阶段的主要目标是将反映用户信息需求的系统逻辑方案转换成可以实施的基于计算机的物理方案,并为下一阶段的系统实施提供必要的技术资料。
本系统采用结构化设计的方法来实现系统总体功能,提高系统的各项指标,即将整个系统合理的划分成各个功能模块,正确地处理模块之间和模块部的联系以及它们之间的调用关系和数据联系,定义各模块的部结构,通过对模块的设计和模块之间关系的系统来实现整个系统的功能[17]。
3.1.1设计方案
“飞机大战”游戏整体设计思路,首先开始游戏,玩家通过鼠标控制战机移动,可以躲避敌机或发射子弹销毁敌机,销毁敌机可以得到相应分数,玩家战机血条生命值为100,被敌机击中会减少生命值。
玩家战机可以吃奖励,得到奖励可以发射超级子弹和导弹。
游戏可以暂停和继续,当玩家战机的生命值为0时,战机死亡,死亡后弹出结束界面显示玩家所得分数和重新开始游戏。
游戏可以划分成几个部分,开始游戏部分,敌机的控制,玩家战机控制,奖励部分,游戏得分部分,游戏结束重新开始部分。
敌机的控制部分是定义一个孵化器一直生成敌机,敌机分为3种类型,小型飞机、中型飞机和大型飞机,小型飞机的生命值是1,即需要一发子弹就可以销毁;中型飞机的生命值是5,需要5发普通子弹销毁;大型飞机的生命值是15,需要15发普通子弹才能销毁,设置的普通子弹一次碰撞可以减少1个生命值。
设置的三种敌机的生成速率分别为0.5S、5S和8S,销毁三种敌机所获得的分数分别为100分、500分和1500分。
玩家战机控制部分,首先通过鼠标控制战机的上下左右移动,但战机只能在屏幕的背景框里移动,不能超出界面。
战机可以发射普通子弹和超级子弹两种武器,普通子弹是从战机的头上发射的,超级子弹是从机翼两侧发射的,当玩家吃到超级子弹奖励后就可以发射超级子弹。
战机的初始生命值是100,被敌机击中一次就减少1/4的生命值,所以被击中四次就会死亡。
奖励部分分为两种,一种是超级子弹,另一种是导弹。
当战机吃到超级子弹奖励时子弹会从单发变成双发,并从机翼的两侧发出,但超级子弹有时间限制,吃一次超级子弹奖励的时间为10S,10S后子弹自动变成普通子弹。
当战机吃到导弹奖励后,屏幕左下角会出现一个导弹的图标和导弹的数量,单击空格键就可以使用导弹,导弹可以炸掉整个屏幕的所有敌机,导弹使用后数量减少1,当小于1时屏幕上导弹图标消失。
游戏得分部分分为历史最高和最终得分,游戏得分是按消灭敌机多少记录的,消灭一个小型飞机的分数是100分,中型飞机的分数是500分,大型飞机的分数是1500分。
游戏开始后在屏幕的左上方显示“Score:
”加分数,当战机死亡时左上角显示游戏分数,屏幕中间显示历史最高分和最终得分,最终得分就是本次游戏的得分。
游戏的整体设计类图如图3-1所示,Hero类是玩家战机类,Spawn是孵化器类,孵化器类通过代码生成3种敌机和2种奖励,奖励类是Award,敌机类是Enemy,当敌机被击落的时候播放爆炸动画,调用的是爆炸控制类即BombManager类。
当玩家战机死亡进入游戏结束界面,调用GameOver类,游戏结束时显示重新开始游戏和退出游戏,分别为Restart类和Quit类。
图3-1系统类图
3.1.2系统流程
系统主要流程是开始游戏,初始化玩家战机,定义的孵化器生成敌机,玩家战机发射子弹击毁敌机,玩家得分;玩家战机成功躲避敌机,敌机移动至屏幕外后自动销毁(Destroy)掉;当玩家战机被敌机击中血条减少1/4,当玩家被击中四次时玩家战机死亡,游戏结束。
游戏结束界面显示玩家的最终得分和历史最高分以及重新开始和退出游戏按钮,点击重新开始按钮可以重新玩游戏,点击退出游戏按钮,将退出游戏。
系统流程图如图3-2所示。
图3-2系统流程图
3.2模块详细设计
模块详细设计是介绍整个游戏的具体设计和思路,详细设计里面先整体的介绍游戏的类,然后分三个模块开始游戏、暂停游戏和重新开始,具体介绍每个模块主要的组成和每个模块的类[18],以及游戏的部分实现过程。
表3-1介绍了游戏的类和类的主要说明。
表3-1游戏类表
类名称
类的说明
Award.cs
奖励类,定义两种奖励超级子弹和炸弹。
BackgroundTransform.cs
背景图片循环播放类,定义图片播放速度,实现两背景图片的轮播。
BombManager.cs
爆炸控制类,定义炸弹、炸弹数量,实现添加炸弹方法和使用炸弹方法,使得炸弹数目大于0时按下空格键实现炸弹爆炸,击毁屏幕上的所有敌机。
Bullet.cs
子弹类,定义子弹移动速度,实现子弹和敌机的碰撞检测方法,当子弹超出屏幕边界值是自动销毁。
Enemy.cs
敌机类,定义敌机的血量、移动速度、分数和打击时间,实现子弹击中方法和死亡方法。
当炸弹数大于0时按下空格键炸掉所有敌机,敌机超过屏幕边界后自动销毁。
GameManager.cs
定义游戏运行和暂停两种状态、分数,实现改变游戏状态方法,暂停游戏方法,继续游戏方法。
GameOver.cs
定义当前得分和最高分数,实现show()方法,显示最高分和当前得分。
GamePause.cs
实现暂停游戏方法,添加暂停按钮声音。
Gun.cs
定义枪子弹速度、子弹对象,实例化子弹,实现开火方法和停火方法。
Hero.cs
玩家战机类,定义战机的三个子弹头,超级子弹的时间,鼠标按下状态,血条,实现了飞机动画播放,鼠标按下事件,获得超级子弹奖励后超级子弹实现及两种子弹状态的相互转换,战机被敌机击中后血条减少生命值的方法,战机移动空间对边界值的控制,实现战机与奖励的碰撞检测,子弹与敌机的碰撞检测,敌机与战机的碰撞检测及战机死亡方法。
Quit.cs
实现退出游戏方法。
Restar.cs
实现游戏重新开始方法。