Unity3D游戏设计与实现

上传人:沈*** 文档编号:99384617 上传时间:2022-05-31 格式:DOC 页数:33 大小:2.87MB
收藏 版权申诉 举报 下载
Unity3D游戏设计与实现_第1页
第1页 / 共33页
Unity3D游戏设计与实现_第2页
第2页 / 共33页
Unity3D游戏设计与实现_第3页
第3页 / 共33页
资源描述:

《Unity3D游戏设计与实现》由会员分享,可在线阅读,更多相关《Unity3D游戏设计与实现(33页珍藏版)》请在装配图网上搜索。

1、分类号:TP31 U D C:D10621-408-(2014)1248-0密 级:公 开 编 号:成都信息工程学院学位论文Frozen游戏设计与实现论文作者姓名:申请学位专业:数字媒体技术申请学位类别:指导教师姓名(职称):论文提交日期:第 1 页 共 33 页Frozen游戏设计与实现摘 要为了学习Unity3D游戏引擎,为了进一步了解并熟悉该款引擎,本文描述了如何制作了一个二维的跑酷类游戏项目,这个游戏的背景来源于一部叫做冰雪奇缘的电影。通过对该项目的制作和学习,来了解用Unity3D开发游戏的利与弊,以及这款游戏引擎未来的优势。本文所述的游戏项目开发所用的开发工具是Unity3D自带的

2、开发工具,叫做MonoBehaviour,选择的开发语言是C#。该游戏项目是一个小型的2D游戏制作,开发周期短,实现所涉及的技术也是学习Unity3D必备的一些知识,但是也是一些重要的基础知识,很多其他的Unity3D游戏制作,也是通过把Unity3D的各个功能模块一点点组织拼接起来而成的。关键词:Unity3D;游戏引擎;语言开发环境;跑酷游戏the Design and Implementation of Frozen GameAbstractIn order to know and learn more about Unity3D game engine, this papers des

3、cribes how I develop a parkour game project whose background comes from a movie called Frozen. Through the study of this game project, we will get to know the pros and cons to use the game engine and its advantage of the future. We did this game project using its own development tool named MonoBehav

4、iour. we used C# as its development language. This is a small 2D game with short development period and some basic techniques which are important knowledge.Many other Unity3D games are the union of some Unity3D function parts.Key words: Unity3D; game engine; language development environment; parkour

5、 game目 录论文总页数:281引言11.1Unity3D简介11.2Unity3D语言开发环境及开发工具21.3Unity3D应用21.4Unity3D未来优势42使用UNITY3D开发游戏的优势42.1跨平台的先进技术42.2轻松入门52.3市场影响力广53研究现状及设计目标63.1游戏简介及动画制作63.2游戏类型73.3游戏前景73.4技术实现及其优势83.5游戏项目设计目标84需要解决的问题94.1游戏项目中要解决的问题94.2碰撞检测问题94.3粒子系统104.4函数115游戏总体设计135.1游戏设计准备阶段135.2游戏设计制作阶段145.3游戏设计完成阶段145.4游戏玩法

6、说明166游戏简介166.1游戏背景166.2敌人166.3玩家166.4分数统计167游戏实现167.1变量167.2函数177.3粒子系统的实现197.4碰撞检测的实现217.5音效的实现217.6游戏通关227.7游戏失败238项目总结238.1总结的目的238.2关键性问题总结238.3游戏开发周期23结 束 语25参考文献26致 谢27声 明281 引言1.1 Unity3D简介Unity3D是由Unity Technologies开发的一个游戏引擎,操作界面如下图1.1所示,它集快速性交互性于一体,带有强大的渲染引擎,对DirectX、OpenGL拥有高度优化的图形渲染管道,能够允

7、许开发者能够高效直观的开发出2D或者3D游戏,是一个全面整合的游戏引擎。并且,Unity3D游戏引擎能够十分方便的将开发出的游戏发布到各个平台,如iPhone、Android等平台。此外,还可以用Unity Web Player插件将作品发布成网页游戏,玩家只需下载这个很小的插件就能轻轻松松的玩Unity网页版游戏。Unity3D游戏引擎通过使用植被系统Unitree,提供了大量的Shader供开发者使用,这些Shader完全足以满足开发者的需求,使得即使在低端硬件设备下也能够运行广阔茂盛的植被景观。打开地形编辑器,从左到右依次是:地形拉升降低、准确的绘制地形高度、地形圆滑、地形文理绘制、地形

8、植被绘制树木、地形植被绘制-草及小物体、地形参数设置。另外,它支持所有主要的文件格式,并能和其他应用程序协同工作。它还用了PhysX的物理引擎,使得开发者能够轻松的实现各种物理效果。Unity游戏引擎提供了柔和阴影与烘焙的高度完善的光影渲染系统,它的着色器整合了易用性、灵活性和高性能的特点。目前,Unity3D游戏引擎最新版本是Unity4.0,它能将你的作品发布到MAC、Windows、安卓等十个以上当今盛行的平台。此外,购买功能更加强大的正版Unity3D游戏引擎,经授权之后可以安装在2个不同的系统,如一个Windows,一个Mac,官方网址是。Unity3D游戏引擎研讨会正在茁壮发展。第

9、一次Unity3D游戏引擎研讨会是在2010年5月,举办地点是在韩国,引发了许许多多的商家投资并签订了引擎预定协议。亚洲作为Unity3D游戏引擎公司的一个重要战略地,2013年在上海举办了研讨会。不久Unity3D游戏引擎公司又宣布取消支持对Flash的支持。图1.1 Unity3D操作界面1.2 Unity3D语言开发环境及开发工具Unity3D是一款综合型的游戏开发引擎。其中MonoBehaviour是该公司自己开发的一个编译工具,自然跟Unity3D是十分兼容的,比如调试等就十分方便。当然,也可以选择自己的编译工具,如Visual Studio 2010,只需要在菜单里面设置一下默认编

10、译工具就行,这样在你创建并打开代码文档时就默认打开了你所设置的编译工具。目前,Unity3D只允许3种编程语言:C#、javascript、Mobo。其中C#运用较为广泛,因为它的兼容性比较好,便于更好的发布到各个平台。1.3 Unity3D应用目前,用Unity3D游戏设计引擎开发手机游戏的比较多,如勇者之心、神庙逃亡系列、愤怒的小鸟等;也有用来开发单机游戏的,如轩辕剑六、捣蛋猪等;网页游戏诸如新仙剑Online、QQ乐团等,部分游戏截图如图1.2、1.3、1.4所示。在虚拟现实方面,只需要将在Maya或者Max等其他三维软件里面做出的模型导出为fbx格式,然后导入Unity3D,设置摄像机

11、代码、UI、Build。图1.2 神庙逃亡图1.3 愤怒的小鸟图1.4 轩辕剑1.4 Unity3D未来优势很多游戏引擎起初都是很不起眼的,Unity在2004年诞生于丹麦,后来把总部设在了美国旧金山。到2014年,其注册人数已达80万,仅是苹果应用商店里面用Unity开发的游戏已达一千五百多个。在未来,随着Web、IOS、Android等平台越来越广泛的应用,因它强悍的跨平台能力和易学的功能界,Unity3D游戏设计引擎必将变大炙手可热。Unity3D是开发者使用最广的游戏引擎,目前有53.1%的开发所开发的游戏是通过Unity3D游戏引擎来开发制作的,其中在一项调查中显示,开发选择这款引擎

12、一个最重要的因素是它的开发周期短。之所以这样,是因为他们都觉得Unity3D游戏引擎简单易学,功能强大;有一定程序基础的人只需要一两个月就能入门。2 使用Unity3D开发游戏的优势2.1 跨平台的先进技术Unity3D开发的游戏和应用主要使用的是C#语言,当然前面介绍的其他的2种语言也可以,其编译的过程根据目标平台的变化而不尽相同。在PC、Mac和Android平台上,你所写的代码会被系统编译成字节码,并且可以在Runtime用JIT(Just In Time的缩写,中文意思是即时编译器)编译器执行。如果是在其他的平台上,那么游戏在执行是代码是需要进行一个预编译的,转变成目标机器的本地代码而

13、执行。这就是为什么Unity3D开发的游戏能够支持多平台,能够发布到近十几种十分流行的平台上去,如下面图2.1所示:图2.1 Unity3D多平台性2.2 轻松入门目前为止,注册Unity3D用户已达八十多万,每天在线人数达二十多万,你如果在学习使用Unity3D的时候可以随时上官网论坛上去请求帮助。更重要的一点是你所遇到的问题,其实在之前很多人都遇到过,这样你的问题就很快能得到解决。另外,Unity3D的交互性特点可以让你即使程序基础不是很好也能设计出你想要的游戏。比如有一个2D游戏叫挺过1分钟,游戏场景只有一个,就是一个封闭的长方形界面,一个人物左右移动躲避一个在理想状态下在长方形里面弹来

14、弹去的球,随着时间的增加,球的数量也会增加。这里涉及到的基础知识只有几点,如碰撞检测、物理引擎,游戏大小只有几KB,但是这个游戏却很有趣,吸引力不少人,可以在无聊之际用来打发时间。2.3 市场影响力广现在不管是哪行哪业,什么产品,都将就一个客户需求量,也就是市场,那么Unity3D的市场怎么样呢?同诸多游戏引擎不同的是,Unity3D不仅仅处在3D游戏市场,也能够制作完美的2D游戏,Unity3D支持很多平台(Windows、IOS、Mac等十余种),还支持许多游戏机(PS3、Wii等),以及浏览器等等,市场范围是如此之广。在一项调查中显示,一个开发者在开发一个3D游戏的时候,有72%的人首选

15、的开发工具是Unity3D。他们往往还选择用Unity3D做一下视觉结构、军事仿真等等。3 研究现状及设计目标3.1 游戏简介及动画制作游戏项目开发的游戏名称为Frozen,使用的游戏引擎为Unity3D,开发周期大约一个多月,代码文件16个,开发语言为C#。游戏共有6个场景,分别是开始场景、选关场景、关卡1、关卡2、胜利场景、游戏介绍场景,没有失败场景,失败的时候是绘制了一个窗口,让玩家选择是重新游戏或者退出游戏。游戏也有用到Unity3D动画制作的功能,如游戏人物的跳跃,开始界面等,这里将游戏动画介绍一下,下面就不在叙述了。选中需要做动画的一个游戏对象,然后选择Window-Animati

16、on,进入动画编辑窗口,如下图3.1所示:图3.1动画编辑窗口做动画之前应该先存储这个动画原件,点击红色的圆形按钮,并为动画取好名称,存储在Animation目录下。然后在需要改变的属性上面右击,添加关键帧,改变响应属性,点击运行按钮,动画变完成了。需要注意的是,我们在人物动画做的是一个按空格键跳动的动画,而不是让他一直跳,那么就需要代码控制了,如下:void Start ()transform.animation.Stop();void Update()if(Input.GetKeyDown(“space”)transform.animation.Play();3.2 游戏类型游戏项目所开发

17、的游戏名称为Frozen,游戏操作十分简单,空格键跳跃来躲避雪球或者夺取雪花,Q键发射飞镖击杀敌人。按游戏类型来分,本游戏属于一种冒险类游戏(Adventure Game),也是一种跑酷类游戏,主要考察玩家的操作和对未知是好奇之心,引发他们的互动性。按游戏内容来分,本游戏属于一种探索类游戏,通过不同的关卡,玩家可以通过不同的方式来获得游戏分数,不停的进行探索。按游戏载体来分,本游戏属于电子类游戏。按游戏平台来分,本游戏可以发布到十多个平台,具有广大的平台系统。按玩家人数来分,本游戏属于单人冒险过关游戏,是一个单机游戏。3.3 游戏前景如今手机游戏正在蓬勃发展,属于一种朝阳行业,而且本游戏的设计

18、背景又源自于一部风靡全球的美国动画片Frozen,电影海报如图3.2所示,当用户看见这个名字时会不经意的去下载它。就客户量来说,随着这部电影的喜爱着的增加,加上手机用户量庞大,因此本游戏具有它的客户量。就经济效益来说,游戏开发的时间和成本都很低,需要的资源很很少,却能带来很多的经济效益。就市场来说,由于Unity3D可以把产品发布到十多个目前流行的平台,它的市场面是十分广大的。图3.2 电影冰雪奇缘3.4 技术实现及其优势游戏项目使用Unity3D游戏设计引擎,其优势在于该引擎支持多平台多种开发环境。还有一个重点是它具备良好的交互性,因为开发一个游戏,最主要的目的是让它好玩,那么开发者在制作的

19、过程中就能体会到游戏的可玩性是否高。3.5 游戏项目设计目标设计该游戏的目标是广大的手机用户,图3.3,亦可以发布至Windows等其他平台,具有广大的目标群。由于Unity3D具有先进的跨平台技术,你的作品只需要一次性编写代码,就能轻轻松松发布到多钟平台去。 图3.3 手机游戏4 需要解决的问题4.1 游戏项目中要解决的问题游戏项目要解决的问题很多,所以最关键的是先要管理好资源文件,分类明确有条理。在项目文件的预设目录下,共创建了8个文件夹,分别存放动画文件、材质文件、模型文件、Prefab文件、场景文件、代码文件、音效文件和纹理文件。游戏项目视图4.1:图4.1 游戏项目视图4.2 碰撞检

20、测问题Unity3D中实现碰撞检测的方式有两种:碰撞器和触发器。碰撞器有很多的种类,如盒子碰撞器、球形碰撞器、胶囊碰撞器等,要使用这些碰撞器都必须把该碰撞器组件添加到一个游戏对象上面。如果在检视面板中勾选了IsTrigger,那么就成了触发器。下面介绍MonoBehaviour类里面两个函数:1、MonoBehaviour.OnTriggerEnter(Collider collider)进入触发器。2、MonoBehaviour.OnCollisionEnter(Collision collision)进入碰撞器。本游戏项目所涉及到的碰撞检测都是进入时的检测,即刚发生碰撞,没有退出和逗留时的

21、碰撞检测,所以另外四个接口函数就不在赘述,具体可以去官网查询。添加碰撞检测组件碰撞检测器之后,在监视器窗口显示如下图4.2:图4.2 碰撞检测器组件添加方法:Component-Physics-Collider;Component-Physics-Rigidbody;Is Trigger属性在勾选状态下,那么该对象就是触发器。下面其它参数则是设置碰撞体的大小、半径。添加碰撞检测组件刚体之后,在监视器窗口显示如下图4.3:图4.3 刚体组件Mass是质量,Drag是阻力,Angular Drag是角阻力。Use Gravity是否使用重力,如果勾选物体将相对向下做自由落体运动。Is Kinema

22、tic是否相对地面静止,如果勾选物体将相对地面静止。Constraints属性块是设置物体的位置和旋转是否静止,例如勾选了Freeze Position Z那么物体在Z轴方向不能移动,用脚本也不能让它移动;这是很必要的,比如你做的是一个2D游戏,自然不希望它在Z轴发生移动而影响碰撞检测。4.3 粒子系统Unity3D自带的粒子系统完全足以满足开发者各种这方面的需求,比如在制作烟雾、云雨、爆炸、火焰、天气等。在创建好游戏对象并添加粒子系统组件之后,正如你所见的,会出现很多属性,如图4.4:图4.4 粒子系统图4中所示的参数设置在运行后出现的效果是一个下雪的效果。具体各个参数的意思,在这就不赘述了

23、,举几个常用的参数。Looping是否循环,比如此下雪的粒子效果,当然要他循环,再如爆炸之类的就不需要循环。Start Speed初始速度,可以设置一个参数,也可以设置两个,即在这两个参数之间随机产生一个参数,这个比较常用,Start Scale用法与Start Speed类似。4.4 函数不管用什么编程语言,创建的脚本都必须继承MonoBehaviour类,他包括了许许多多的函数,诸如上述的碰撞检测函数。如果在检视器里面修改了脚本文件的名称,一定要记得在编译器里面修改类名,不然就会出现异常的错误。这里介绍几个常用的函数。1、MonoBehaviour.OnGUI()接口有许多的属性,如GUI

24、.Label用于绘制列表,它有6个接口:(1)static function Label(position:Rect, text:String):void;(2)static function Label(position:Rect, image:Texture):void;(3)static function Label(position:Rect, content:GUIContent):void;(4)static function Label(position:Rect, text:String, style:GUIStyle):void;(5)static function Labe

25、l(position:Rect, image:Texture, style:GUIStyle):void;(6)static function Label(position:Rect, content:GUIContent, style:GUIStyle): void;像游戏分数统计等,又如GUI.TextArea用于绘制文本区域,它有4个借口,这里不再赘述。最常用的是GUI.Button,设置各种按钮。所有的GUI属性都可以在检视器里面创建一个GUISkin,来设置个性化的按钮、图片背景等,它有6个借口:(1) static function Button(position:Rect, te

26、xt:String):bool;(2) static function Button(position:Rect, image:Texture):bool;(3) static function Button(position:Rect, content:GUIContent):bool;(4) static function Button(position:Rect, text:String, style:GUIStyle):bool;(5) static function Button(position:Rect, image:Texture, style:GUIStyle):bool;(

27、6) static function Button(position:Rect, content:GUIContent, style:GUIStyle):bool;这里将举例如何使用个性化的按钮,代码如下:public GUISkin mySkin;void OnGUI()GUI.skin = mySkin;if(GUI.Button(new Rect(300, 200, 200, 100), “”, GUI.skin.GetStyle(“beginButton”)Application.LoadLevel(“Level”其中mySkin用来接收在检视器窗口创建的GUISkin游戏对象,在游戏

28、对象里面你可以指定个性化的按钮图片,可以是两张,一张是正常情况下的大小,指定在Custom Styles的Normal和On Normal属性上面,一张是鼠标移动上去的大小,指定在Custom Styles的Hover和On Hover属性上面,如下图4.4。这样就会达到鼠标移动上去按钮变大的效果。图4.5 个性化按钮2、MonoBehaviour.Start和MonoBehaviour.Update函数。MonoBehaviour.Start函数就是对游戏的一些预设,并且在游戏执行的整个周期中,此函数只调用一次。比如隐藏光标:void Start ()Screen.showCursor =

29、false;/隐藏光标/ Screen.showCursor = true;显示光标通过这样的设置,我们就可以编写响应的代码来实现个性化的光标了。MonoBehaviour.Update函数功能就是在执行完MonoBehaviour.Start函数之后,游戏的每一帧都会执行该函数,来绘制每帧的画面,这是非常重要的,否则游戏将无法运行。精灵动画的函数就必须放在这里面。5 游戏总体设计5.1 游戏设计准备阶段在游戏项目准备阶段,最主要的事情就是准备游戏素材,在选材、美工等方面都有严格的要求。首先是制作按钮,如菜单按钮、退出按钮、选择按钮等等;其次是场景背景图片,力求能表达游戏主题、美观;还有精灵动

30、画序列图的制作,即游戏玩家和敌人;还有游戏失败窗口的制作、飞镖、雪花等等。5.2 游戏设计制作阶段在游戏项目的制作阶段,首先创建好六个场景并取好名字。在开始界面,点击开始游戏或者游戏操作介绍按钮就会分别进入到关卡一或者游戏介绍场景。关卡一获得的分数达到100分,将自动跳转到关卡选择界面,然后才能进入关卡二,继续游戏,达到200分后,跳到胜利场景,游戏结束。每个场景都有相应的脚本文件,许许多多的游戏对象。每个游戏对象的组件都不尽相同,各有不同的功能,在下面将会有说明。5.3 游戏设计完成阶段目前游戏项目已经完成,能够顺利运行,并有音效、天气效果等。开始界面如下图5. 1:图5.1 开始界面点击开

31、始游戏将进入游戏,如图5.2所示:图5.2 游戏界面点击游戏介绍将进入游戏介绍界面,如图5. 3所示:图5.3 介绍界面5.4 游戏玩法说明游戏所设计的玩法十分简单,空格键跳跃,其实跳跃的时候播放的是一个动画;按Q键发射飞镖,飞镖是一个Prefab对象,每按一次Q都将实例化一个该Prefab对象,并在几秒后销毁。如果玩家不小心碰到雪球或者飞鸟,都将导致游戏失败,雪球不能击毁只能跳过,飞鸟能通过飞镖击毁并获得5分。在关卡二,如果玩家跳跃的时候能够获得雪花会加10分,不过这会导致躲避雪球的难度增加。另外随着时间的增加,分数也会每秒长1分。游戏玩家的生命数只有一条。6 游戏简介6.1 游戏背景游戏项

32、目开发的背景故事源自一部正在热映的美国动画片Frozen,这是一个充满冰雪和浪漫的童话世界。故事讲述的是一个咒语让美丽的王国被冰天雪地永久覆盖,而这个咒语正发生在冰雪皇后艾莎身上,国王被冰封之后,艾莎也失踪了。乐观勇敢的公主安娜在乐于助人的山民克里斯托夫的帮助下,带着他的坐骑驯鹿准备出发去寻找安娜失踪的姐姐,来重新拯救王国,破除这个让国家冰封的咒语。一路上的艰难坎坷、奇妙历险,让人回味无穷、催人泪下。因此,具有开发此游戏的必要性和紧迫性,随着人们对电影的热爱和追捧,也会对该游戏产生极大的兴趣。6.2 敌人在安娜和山民克里斯托夫的历险中,遇到过狼、雪崩以及恶劣的天气。游戏敌人有两个,一个是地上滚

33、动的雪球,只能跳跃躲避,另外一个是随机速度和高度飞过来的鸟,击毁鸟会加5分。6.3 玩家游戏玩家Player对象是一个跑动的人物,不停的跳跃躲避雪球,并发射飞镖来躲避飞鸟的攻击。他的生命目前只有一次,以后可能会改动。6.4 分数统计这里专门设计了一个脚本文件来统计分数,分数分为当前分数和最高分数。当前分数会随着游戏的变化不断更新,每秒钟加1分,击中飞鸟加5分,获取雪花得并获得10分,然后在进入下个关卡当前分数清零。最高分数是继承的MonoBehaviour.PlayerPrefs属性,它具有本地保存数据的功能,能够保存游戏过程中获得的最高分数。7 游戏实现7.1 变量任何游戏的变量都非常的多,

34、这里不再赘述,仅列举几个重要的全局变量。1、static int型变量m_score存放游戏当前分数;2、static int型变量HighScore存放游戏最高分数;3、static bool型变量isHitted判断玩家是否碰撞到飞鸟、雪球或者雪花,默认值是false;4、GUISkin型变量mySkin保存皮肤,用于制作个性化按钮、列表等;7.2 函数任何游戏的函数都非常的多,这里不再赘述,仅列举一些重要的函数。1、bool myAniSprite(int colsize, int rowsize, int colframestart, int rowframestart, int to

35、talframes, int framepersecond, int totaltime, bool moveDirection) myTime += Time.deltaTime; if (totaltime != 0 & myTime totaltime) isPlay = false; myTime = 0; return isPlay; int index = (int)(myTime * (framepersecond - 1); index = index % totalframes; int v = index / colsize; if (moveDirection) size

36、= new Vector2(float)(1.0 / colsize), (float)(1.0 / rowsize); u = index % colsize; else size=new Vector2(float)(-1.0 / colsize),(float)(1.0 / rowsize); u = -index % colsize; offset=new Vector2(float)(u + colframestart) * size.x), (float)(1.0 - size.y) - (v + rowframestart) * size.y); renderer.materia

37、l.mainTextureOffset = offset; renderer.material.mainTextureScale = size; return true; 此函数实现的功能就是精英动画的播放,它的原理很简单,比如一张2行3列的图片,如图7.1所示,划分成6个块,每帧渲染一块,由于视觉暂留,就会成为动画。上述代码最关键的就是计算精灵序列图的offset和size值,并将他们分别赋值如下:renderer.material.mainTextureOffset = offset;renderer.material.mainTextureScale = size;然后系统就会在每帧执行

38、一次该函数,以达到角色运动的效果。图7.1 精灵动画2、private void DrawWindow (int windowID)GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), loseWindow);GUI.Label(new Rect(350, 300, 240, 40),Score: + Score.m_score.ToString(),GUI.skin.GetStyle(label);GUI.Label(new Rect(350, 350, 240, 40),HighScore: + PlayerPrefs.G

39、etInt(HighScore).ToString(),GUI.skin.GetStyle(label);if(GUI.Button(new Rect(300, 400, 200, 200), , GUI.skin.GetStyle(backButton)Application.LoadLevel(MainScene);此函数实现的功能是绘制窗口,如在玩游戏的时候,当你要重新开始时,系统就会弹一个窗口,询问你是否重新开始。3、IEnumerator PlaySound (AudioClip soundName)if(!audio.isPlaying)audio.clip = soundName

40、;audio.Play();yield return new WaitForSeconds(audio.clip.length);此函数实现的功能是音效的控制,在什么时候停止、暂停或者播放等。7.3 粒子系统的实现游戏项目下雪的天气效果就是通过Unity3D粒子系统来实现的。首先,创建一个空白的GameObject,然后把粒子系统游戏组件添加到里面,步骤如下:Component-Effects-Particle System;设置参数如下图7.2、7.3、7.4所示:图7.2 雪粒子参数图7.3雪粒子参数图7.4雪粒子参数其他选项不需要勾选就能呈现出下雪的效果了。7.4 碰撞检测的实现这里仅列

41、举一个碰撞检测函数,首先得在相应的两个游戏对象上面添加碰撞检测器和刚体组件,具体步骤如下:Component-Physics-Collider;Component-Physics-Rigidbody;注意不要勾选重力,代码实现如下:void OnTriggerEnter (Collider collider)if(collider.gameObject.name = Player)isHit = true;Score.isHitted = true;if(collider.gameObject.name = bullet(Clone)isHitBullet = true;SetPosition

42、AndSpeed();Score.m_score += 5;该碰撞检测函数使用的是触发器,检测的是玩家对象是否碰撞到飞鸟以及飞镖是否碰撞到飞镖,进而实现不同的游戏功能。7.5 音效的实现音效主要有背景音乐、人物音效、飞镖音效等。实现游戏音效,只需要在主像机添加一个Audio Listener游戏组件,具体步骤如下: Component-Audio-Audio Listener;然后在相应的游戏对象上面添加Audio Source游戏组件,具体步骤如下:Component-Audio-Audio Source;如图7.5所示:图7.5 音效组件最后再用代码进行相应的控制就行了。7.6 游戏通关在

43、玩家通过关卡一得到100分之后,将选择进入关卡二,如果再得到200分就将通关,进入获胜场景。此刻玩家可以看见自己分数和最高分,选择是否重新开始游戏。选关场景如图7.6所示:图7.6 下一关界面7.7 游戏失败如果玩家在游戏过程中没有躲避雪球或者飞鸟的攻击,那么游戏就会失败。游戏失败之后,就会调用绘制窗口的函数,绘制一个选择窗口。然后,玩家可以选择继续游戏或者退出游戏。继续游戏将回到游戏开始界面,并进入一关,不能直接进行第二关,即使之前通过了第一关也不行。8 项目总结8.1 总结的目的项目在开发的过程中,遇到很多的问题,是需要总结并记录的,以便于下次在遇到同样的问题时,能够快速高效的解决该问题,

44、以节省游戏项目的开发周期,降低开发的成本。并且,对一个已完成游戏项目的总结,在他人学习该项目时,可以提供很好的帮助。8.2 关键性问题总结第一个关键性问题是精灵动画在贴图的时候遇到的麻烦。刚开始用是Unity3D的平面组件来进行贴图,但是贴图用上去之后,运行时,精灵在运动的时候是倒立的,在检视器窗口中进行手动旋转180度之后,貌似问题解决了,但是在脚本控制精灵运动的时候就会出现意想不到的运动,比如代码明明写的是让精灵水平运动,但是精灵却是斜着走的。然后,我又试着用盒子组件来进行贴图,问题就更加千奇百怪了。最后,终于找到了解决办法:用Maya创建一个平面,让这个平面的绕X轴旋转90度,然后绕Y轴

45、旋转180度,使得自身坐标系的Z轴反向,这样再把这个平面导成FBX格式的,再导入到Modles目录下,以便进行精灵贴图时使用。第二个关键性问题是实例化的Prefab对象的销毁问题。我们经常在实例化一个Prefab对象之后就不去管他,这样的话就产生很多游戏对象,影响游戏的运行效率,增加系统的开销。比如本项目中人物发射的飞镖,我是让它在3秒后或者在击中飞鸟的时候销毁,起初我也不知道该怎么去销毁它,因为在实例化之后,这个游戏对象既没有名字(指的是玩家自定义的名字),也没有标签,在调用Desdroy()函数的时候必须填写名字,那么该怎么办呢?方法其实还是很简单的,申明一个私有的GameObject对象

46、,用来接收每个实例化的对象,然后判断这个对象是否为空,不为空就进行销毁。当然遇到的问题还有很多,这里列出了两个最重要最难解决的问题,以便于以后或者他人遇到同样问题时能快速解决。8.3 游戏开发周期做游戏项目一个很关键的因素就是游戏开发所需要的时间,即开发周期。影响本次项目开发的因素不仅是技术上遇到的问题,更多的是美工上遇到的问题,很多游戏项目也因为美工不过关而终止,这就要求前期准备阶段要做好。在技术方面遇到了困难与问题不能一拖再拖,一定要迎面而上,积极处理并寻找解决问题的方法,以免延长游戏开发的周期。结 束 语Unity3D是一款强大的游戏设计引擎,只要具备基础的C、C+、C#、javascr

47、ipt基础的人都很容易上手。凭借Unity3D出色的物理引擎以及3D渲染效果,很值得大家去学习。更大的一个特点是你只需要一次开发,就能把你的作品发布到当今火热的平台上去,诸如Windows、Mac、IOS、Android、Wii等流行的平台。本游戏项目所涉及的Unity3D功能只是很小的一部分,它的强悍之处等着大家一起去学习。参考文献1 浅析Unity3D开发游戏流程及常用技术.中国论文网.2012-10-08.2 Unity3D.百度文库. .2014-04-23.3 Unity3D的诞生与发展.天地会. .2012-06-26.4 宣雨松.Unity3D游戏开发M.北京:人民邮电出版社,2

48、012.06:165183.5 龚老师.Unity4.3游戏开发项目实战M.北京:中国水利水电出版社,2014.02:13175.第 28 页 共 33 页致 谢在游戏项目的制作过程中,多谢魏敏老师和杨康、张明同学的热心帮助,在他们的耐心指导下,我学会使用Unity3D制作自己的毕业设计,并完成毕业论文!最后,感谢各位评委老师的指导和批评!作者简介:姓 名: 性别: 出生年月: 民族: E-mail:声 明本论文的工作是 2013年11月至2014年6月在成都信息工程学院计算机学院完成的。文中除了特别加以标注地方外,不包含他人已经发表或撰写过的研究成果,也不包含为获得成都信息工程学院或其他教学机构的学位或证书而使用过的材料。除非另有说明,本文的工作是原始性工作。关于学位论文使用权和研究成果知识产权的说明:本人完全了解成都信息工程学院有关保管使用学位论文的规定,其中包括:(1)学校有权保管并向有关部门递交学位论文的原件与复印件。(2)学校可以采用影印、缩印或其他复制方式保存学位论文。(3)学校可以学术交流为目的复制、赠送和交换学位论文。(4)学校可允许学位论文被查阅或借阅。(5)学校可以公布学位论文的全部或部分内容(保密学位论文在解密后遵守此规定)。除非另有科研合同和其他法律文书的制约,本论文的科研成果属于成都信息工程学院。特此声明! 作者签名: 2014年06月 日

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!