基于Unity3d的潜行游戏开发毕业设计论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2011届湖北汽车工业学院毕业设计(论文)
毕业设计论文课题名称基于Unity3d的潜行游戏开发
系部计算机工程系
专业计算机科学与技术
班级
学号
姓名
指导教师
2015年 5 月 20 日
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:
指导教师签名:日期:
使用授权说明
本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:
学位论文原创性声明
本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日
导师签名:日期:年月日
注意事项
1.设计(论文)的内容包括:
1)封面(按教务处制定的标准封面格式制作)
2)原创性声明
3)中文摘要(300字左右)、关键词
4)外文摘要、关键词
5)目次页(附件不统一编入)
6)论文主体部分:引言(或绪论)、正文、结论
7)参考文献
8)致谢
9)附录(对论文支持必要时)
2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。
4.文字、图表要求:
1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写
2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。
图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画
3)毕业论文须用A4单面打印,论文50页以上的双面打印
4)图表应绘制于无格子的页面上
5)软件工程类课题应有程序清单,并提供电子文档
5.装订顺序
1)设计(论文)
2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订
教研室(或答辩小组)及教学系意见
摘要
随着计算机技术的不断发展,游戏制作也慢慢成为社会上不可或缺的一部分,游戏一方面能够给玩家带来生活上的放松,另一方面也是对现实中某些场景的夸张和放大,各种各样的游戏能给玩家带来不同体验,深受广大群众的喜爱,市场需求量很大,因此对游戏的开发和研究也显得很有意义。
而在一系列开发引擎中,Unity3D游戏引擎主要用来制作3D游戏,能够给玩家带来很真实的感受和非常不错的游戏体验,与此同时也能做出效果很好的UI界面,学好Unity3D在未来无论是3D网页的开发还是虚拟现实都会起来不可估量的作用,而本次课题就将通过Unity3D做出一个效果不错的游戏。
本次课题做一个潜行类游戏,主角需要避开敌人、红外线、摄像头的检测,拿到钥匙到达指定目的地,就像军事行动深入敌后。
在整个游戏设计过程中会用到一些数学知识,会用到Mecanim动画系统,会用到状态机,会用到自动导航系统,也要求设计者有很强的逻辑思维和一定的审美标准,也需要对游戏引擎有较为熟练的使用能力。
而在界面的搭建上又需要用到UI知识,懂得如何通过视觉魔术让3D模型显示在2D界面,又能让玩家从2D界面感受3D模型的3D效果,对设计者来说是具有一定的挑战和锻炼意义。
开发的游戏有一定的可玩性,可以满足很多玩家的娱乐需求,也可以用来当作二次开发的模型,做出难度更高、涉及元素更多元化、更复杂的市场游戏,因此,本次课题的研发不仅具有学习研究意义,也有一定的市场价值。
关键词:Unity3D游戏;潜行游戏开发;Unity3D技术应用
Abstract
Along with the development of computer technology,game production has gradually become the indispensable part of the society,on the one hand games can take relation to players,on the other hand,it’s also exaggerated and amplified to some of the real scenes,a varieties of games can bring different experience to the game players,loved by the masses,the market demand is very big,therefor,it’s meaningful to research and develop the game.In the series of development engine,Unity3D game engine is mainly used to make 3D games,it can give true feelings and bring a very good experience to game players,make a good effect of UI interface at the same time.Learning Unity3D will rise an inestimable role in the future whether the development of 3D Webpage or virtual reality.This topic will bring a good game for you through Unity3D engine.
This topic will bring you a stealth game,the hero needs to avoid enemy detection,infrared,camera,get the key to arrive at the designated destination.Just like military operations as behind enemy lines.It will use some mathematical knowledge in the game design process,and the mecanim animation system,the state machine,the automatic navigation system,it also requires designers to have good logical thought and aesthetic standards,and the abilities to use engine very well.As for UI design,you must let the 3D models display in the 2D panel though visual magic,and let the players taste the 3D model effects from 2D panel,it’s a challenge and will let designer get some exercise. The game is funny,it will meet entertainment needs of many game players,it also can be used as a model when you do the twice development,to make it more difficult,more diversified,more complex,and make it marketization,therefor,research of this topic not only has significance of learning, there is a certain market value.
Key Word: Unity3D Game ;Stealth Game
Unity3D Technology
目录
第一章绪论 (1)
1.1 开发背景及意义 (1)
1.2国内外研究现状 (1)
1.3本课题简介 (2)
第二章 Unity3D游戏引擎的介绍 (3)
2.1 API接口 (3)
2.2.物理引擎 (3)
第三章游戏的主界面设计 (4)
3.1 界面总体效果 (4)
3.2 具体设计.......................................... 错误!未定义书签。
3.2.1 主界面 (5)
3.2.2 声音控制界面 (8)
3.2.3 场景说明界面 (9)
3.2.4 游戏控制界面 (10)
3.2.5 关卡选择界面 (10)
3.3 实现各界面滑动效果 (10)
第四章游戏设计 (11)
4.1 游戏地形设计 (11)
4.1.1场景鸟瞰图................................... 错误!未定义书签。
4.1.2操作过程..................................... 错误!未定义书签。
4.2 环境对象的设计.................................... 错误!未定义书签。
4.2.1 激光 (12)
4.2.2 感应门 (14)
4.2.3 监控摄像机 (15)
4.2.4激光控制器 (16)
4.2.5 电梯 (17)
4.2.6 其它环境设置 (17)
4.3 人物对象的设计 (18)
4.3.1 主角的设计 (18)
4.3.2 机器人的设计 (22)
4.4 其它必要设计...................................... 错误!未定义书签。
4.4.1 摄像机 (28)
4.4.2 游戏控制 (29)
4.4.3 UI界面 (29)
第五章游戏测试 (31)
5.1Unity中运行 ....................................... 错误!未定义书签。
5.1.1UI界面 (31)
5.1.2 游戏 (32)
5.2 PC端运行 ......................................... 错误!未定义书签。
第六章总结 (34)
致谢 (35)
参考文献 (1)
第一章绪论
1.1 开发背景及意义
随着计算机的不断普及,各种各样的应用也如雨后春笋层出不穷,而伴随着人们生活水平的日益提高,游戏也变成了人们生活中不可或缺的调味品。
做游戏自然离不开开发引擎,Unity是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。
Unity类似于Director,Blender game engine,Virtools或Torque Game Builder等利用交互的图形化开发环境为首要方式的软件,其编辑器运行在Windows和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、Windows Phone 8和Android平台。
也可以利用Unity web player 插件发布网页游戏,支持Mac和Windows网页浏览。
它的网页播放器也被Mac widgets 所支持。
除此之外,Unity在虚拟现实中也可以得到广泛应用,本次课题就是想通过主流市场游戏的形式来熟悉和了解Unity的相关技术操作,从而在未来能够在一切都向3D发展的大趋势下游刃有余。
1.2国内外研究现状
90年代初国外的3D游戏就已经开始起步了,第一部3D第一人称射击游戏是美国的卡马克的《重返德军总部》。
国内3D游戏则起始于2003年,相较于国外的3D 游戏开发起步要晚了很多,虽然国内大的游戏公司和团队也开发出了自己的引擎,做出了《古剑奇谭》系列,《仙剑奇侠传》系列的游戏,但相比较国外的《魔兽世界》、《模拟人生》等国际游戏大作,无论是从游戏开发理念上还是技术支持上都还有不可逾越的差距,导致大量的财富资金流向国外。
而随着时间的推移,手机也越来越智能化,现在的手机可以说比十几年前的电脑更加强大,也越来越多的应用出现在了手机上,游戏也是不可或缺的一部分,但
是不同语言开发工具开发的产品想要移植到手机上需要花费巨大的代价,成本太高,操作很复杂,国外的一款游戏引擎完美的解决了这个问题,那就是Unity3D。
对于Unity3D,国内对其的研究还处于起步阶段,所以我们认真的学习国外的优秀游戏引擎,熟悉其操作,对以后自主研究符合自身需求的引擎有很大的参考价值。
1.3本课题简介
本课题开发一个潜行类的游戏,其中游戏主角将小心的潜入敌人的大本营,通过敏捷的身手,机智的头脑找到所有的电脑控制台关闭所有的激光红外线,在行进过程中需要躲避所有的摄像头检测,尽可能的避免机器人的发现,在被发现后能逃过所有机器人的追捕,最终拿到钥匙进入电梯后从容离开。
在游戏开始会有关于游戏的操作控制说明,也可以选择不同的关卡。
进入游戏后,机器人会进行自主巡逻,主角需要合理的利用潜行,避免被机器人听到脚步声后前来追击,合理的利用地形是制胜的关键,请注意不要碰到红外线,一旦玩家被发现,所有巡逻机器人会前来对你进行围剿,这个时候就将是显示你高超的智商的时刻,冷静、沉着的应对,找到合适的方法,玩家也可以躲避追捕化险为夷。
第二章Unity3D游戏引擎的介绍
2.1 API接口
API是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
Unity3D就有一套自己的API函数库,通过这些API函数,开发人员可以很方便的实现项目的初始化,功能模块的每帧调用,如何进行触发检测并进行触发事件的响应,如何判断是否进入触发区,是否在触发区,是否离开触发区,如何实现拖动事件的响应等等。
2.2.物理引擎
任何一个游戏的设计都必须有其物体特性的合理性,这样才能显得真实可信,在Unity3D中为开发人员提供了大量的组件,可以对对象进行渲染,颜色的透明度、法线贴图、平行光、点光源、图片、文字、声音、动画、材质等一系列组件可以让人产生很逼真的视觉效果,而在物理特性上添加的刚体、碰撞器等组件,可以实现对象受到重力、摩擦力、空气阻力等自然物理特性的影响,而爬坡的坡度设定,碰撞后的一切物理变化,逼真的体验让你觉得这就是一个现实中的物体。
可以说Unity引擎就是一个组件编程的引擎,整个开发过程就是一个从无到有的组件添加,对象的物理特性Unity一般都封装好了,只需要找到合适的组件进行添加,合理控制其属性即可,而行为特性就是脚本,通过代码的逻辑操作进而实现对象的一系列活动事件。
第三章游戏的主界面设计
当一进入游戏,就将会跳转到开始界面,在该界面中你可以看到游戏主角的一个静止状态的动画,上面写有游戏名称,在右上方有一个游戏的标志,左下方的是声音选项按钮,点击后会进入声音面板。
在开始界面里可以进行鼠标的拖动,用来实现不同的几个界面的滑动效果,图3.2即为游戏的说明界面,在里面描绘了主角和机器人在四种各不同场景下会出现的情形,图3.3则是告诉你游戏如何进行控制,又如何取得胜利,图3.4则是关卡选择界面,可以选择不同的关卡。
3.1 界面总体效果
整个游戏界面用的是UGUI技术,在整个开发过程中会用到panel组件(作为容器存在,用来存放其它组件,并可添加图片当作背景存在),image组件(用来添加图片,可以用作logo或者按钮等的背景),button组件(作为按钮存在,在其上可以添加点击事件),text组件(用来显示文本信息),slider组件(是一个滑动条,滑动条有一个数值,通过滑动事件同步该数值可以控制音量大小,也可以控制主角血量)。
3.1开始界面 3.2场景说明界面
3.3游戏控制界面 3.4关卡选择界面
3.5声音控制界面
3.1 游戏开始界面
当玩家开始重新玩一次游戏时,会进入游戏开始界面,如图所示:
实现游戏开始界面的主要步骤为:
1.首先在Hierarchy面板建立一个Panel,用来作为对象的载体,给该面板拖拽一个Sprite图片,注意一般图片的类型为texture,选中该图片,更改Texture Type 的类型变成Sprite即可,如图3.6。
3.6 图片属性
2.在该面板内添加一个文本组件,在文本域写上标题Stealth,调整字体大小颜色位置字体等信息,把文本框拖到合适的位置。
3.在界面右上方添加一个图片组件,然后拖一个合适的图片到该组件作为Logo,注意调整锚点位置,方便屏幕自适应,如图3.7。
3.7 锚点图
4.在左下方添加一个Button控件,在其背景中拖动一个合适的背景图片进去。
然后创建一个空对象,用来挂载面板控制脚本,脚本主要实现的是对声音面板动画状态机里面的标志位进行修改,实现在不同条件下不同动画的播放,这里我将通过两个函数,分别对动画状态机里面的标志位进行不同修改来实现不同动画的状态转换,当状态机里面标志位“DisplayAudioSetting”为真的时候就会播放声音面板的显示动画,为假的时候就会播放隐藏动画。
在图3.8所示面板添加事件,然后把该对象拖进去即可产生按钮事件,点击后会调用对应的函数进行事件的响应。
3.8 Button点击事件图
5.添加一个主角,拖动主角模型到合适的位置,在Project面板中给主角添加一个状态机,Create->Animator Controller,然后把主角的静止动画添加进去,如图3.9。
在主角的对象上添加一个Aniator组件,然后把状态机拖进去,运行即可播放主角静止动画。
3.9 主角静止状态机
3.2 声音控制界面
1.添加一个Panel组件作为各组件的载体,给其添加一个sprite图片作为panel 的背景存在。
2.添加2个text组件,用来显示文字,分别写上音效、音量,将其放置到合适位置,调整锚点位置。
3.添加两个slider组件,用来控制声音的大小,在其子对象background上改变颜色为黑色,添加一个空对象用来挂载声音文件,命名AudioController,在其上添加2个声音组件AudioSource,把对应的声音文件拖放进去,然后添加一个AudioListener,用来监听场景中的声音,添加一个脚本,用来控制声音的大小,在控制过程中实现将滑动条的数值实时更新赋值给声音组件声音大小的数值,声音组件的大小值为零到一,属于百分比,滑动范围同样设置为零到一,然后调用Update 函数,此函数每帧都会执行,一秒大约执行60帧,基本可以满足大部分应用实现实时更新效果,如此即可满足声音大小和滑动比例一致。
4.添加一个Button组件,用来控制声音面板的隐藏,选择声音面板,点击Window->Animation,然后出现3.10所示图,该面板是用来自行制作动画效果的,可以通过设置在不同帧的时候对象的位置、旋转等信息来进行录制后连续播放,实现放电影一样的效果,在该面板中设置两个帧动画,调节该面板的位置,实现效果一个为隐藏(把面板拖到摄像机视野外),一个为显示(把面板拖到摄像机视野内),在声音面板上添加Animator组件并把该动画放进去,在Button上添加点击事件,监测到点击后会调用相关函数控制状态机中标志位的值,进而改变状态实现显示或者隐藏,如图3.11.
3.10 声音面板帧动画设置图 3.11 Button点击事件图
3.3 场景说明界面
1.在左上方添加3D模型,一个为机器人,一个为主角,调整好位置放置,给主角添加动画状态机,将其跑动动画放入,然后给主角添加Animator组件,拖入该动画状态机,注意查看该动画,需要修改部分属性,固定跑动使其不产生位移,如图3.12。
在其下方合适位置添加text组件,附上文字说明。
3.12 Run动画设置
2.在其右上方添加模型,并给主角添加上潜行动画,具体方式可参照跑动设置,在其下方添加文件说明。
3.在其左下方添加模型,同时给主角和机器人添加跑动动画,并附上文字说明。
4.在其右下方添加模型,给机器人添加射击动画,给主角添加死亡动画,设置动画循环播放,,并在其下附上文字说明。
3.4 游戏控制界面
拖入各个模型,给钥匙添加一个旋转动画,调整各模型位置,附上文字说明。
3.5 关卡选择界面
1.在其左上方添加一个panel组件,给其添加3个image子组件和一个button子组件,分别给它们附上图片,然后给该面板添加一个帧动画,在第60帧的时候旋转180度,在120帧的时候旋转360度,然后选择动画反复执行,可以实现面板不停做旋转运动,添加一个空对象用来挂载脚本控制关卡的加载,可以直接调用Unity 的API函数Application.LoadLevel()方法进行场景的加载,每个关卡都是一个不同的场景,每个场景都有自己独一无二的索引值,将该值作为参数传给该函数即可区分不同场景的加载,然后将该对象赋给button的点击事件,选择对应的函数实现点击调用。
2.在其他位置添加3个面板,每个面板添加一个button子组件,每个button添加锁的背景图片表明关卡还未开通。
3.6界面之间的连接
在Unity中有两个类IBeginDragHandler,IDragHandler专门封装的鼠标拖动事件,其中OnBeginDrag(PointerEventData eventData) 方法是在鼠标开始拖动的时候启用,可以记录鼠标开始拖动的位置,OnDrag(PointerEventData eventData) 则是在鼠标拖动过程中调用,可以用来记录鼠标最新的位置,在此用来记录当前的位置,用鼠标左键抬起时结束该函数的运行,用此时鼠标的位置减去开始的位置可以得到一个方向向量,通过调用this.transform.Translate()方法,重新给给该面板设置一个相对于世界坐标系的位置即可,需要注意的是,通过拖动函数得到的差值是一个象素值,而在设置位置的时候的值单位是米,用象素值除以100即可得到一个相对较好的效果。
由于拖动过程中很难实现拖动距离正好达到一个界面的宽度,
所以需要实时更新位置信息,通过方向向量的正负情况,确定向哪一个界面移动,然后通过差值运算将面板正好卡到想要达到的效果的位置。
先设置每个面板的宽度为800米,可以在Update函数里面每帧执行,当面板的本地X坐标大于零的时候,让其回到(0,0,0)位置,当面板的本地X坐标小于-3200时,将其移动到(-2400,0,0)位置,当面板本地X坐标在0到800以内,检查方向向量的正负,为正移到(0,0,0)位置,为负移到(-800,0,0)位置,其它面板卡位思想相同,操作类似。
注意在重新设置位置的时候,需要调用Vector3.Lerp()方法,该方法是一个差值运算,当距离目标点远的时候移动很快,距离目标点近的时候移动很慢,可以实现平滑移动。
第四章游戏设计
用文字对本章节介绍内容进行一个简洁
4.1 游戏场景设计
4.1.1 游戏地形设计
本游戏采用了一个工厂地形,但是这个地形是雏形,需要添加
4.1 场景鸟瞰图
1.先把美工做好的地形模型放入,给其添加一个碰撞器,见图4.2。
2.依照鸟瞰图把对应的激光、障碍物、摄像机、机器人、钥匙、主角、控制台、电梯、门等对象放到合适的位置。
4.2碰撞器
4.1.2 激光设计
1.先给激光添加一个light组件,具体设置见该面板,其中Range是用来控制光线照射范围,Intensity是用来控制光照强度的,Color使用来控制光的颜色渲染,根
据场景中实际效果调节该值到一个合适的数值,见图4.3。
2.给激光添加一耳光AudioSource组件,用来控制激光的声音,注意该声音为3D 声音,3D声音只有靠近一定范围才能听见,靠的越近声音越大,是挂载在对象上的,2D声音无论距离远近声音大小一样,设置该声音的传播距离,实现只有靠近才能听见的效果哦,见图4.4。
3.给激光添加一个Box Collider,勾选IsTrigger设置其为触发器,用来控制触发检测的,有了该触发器,当对象进入触发区域即可调用对应的函数,见图
4.5。
4.3 灯光属性 4.4声音组件 4.5触发器
4.给激光添加脚本,用来控制触发响应事件和激光特性。
在本游戏中激光有两种状态,其中一种是一直存在的,另一种是闪烁变化的。
为了区分两种激光,设置一个标志位isFlicker,当其为真的时候代表闪烁激光,为假代表不可闪烁激光。
主角有一个tag标签,所有激光,当碰撞的对象的标签是主角的时候就会控制警报声的响起,并记录主角碰撞的位置信息通知机器人前去追捕击杀。
而对于闪烁激光,通过一个计时器控制闪烁的时间周期,当关闭周期到了使其关闭渲染,关闭触发器,当开启周期到了打开渲染,打开触发器。
5.在Project面板建立一个空的文件夹,用来放置Prefabs,把Hierarchy面板中的激光拖进去做成预制,预制的作用即是克隆,以预制物体为母本,其它所有该物体均为克隆体,当发现有需要改动的地方,改动母体之后,所有克隆体都会修改,用起来很方便。
在合适的位置添加该预制,可实现所有激光特性和预制一样,在靠近电梯的两个激光,勾选isFlicker,设置按灭时间,使其实现闪烁效果。
4.1.2 感应门设计
1.先给门做一个Animator Controller,添加动画状态机Open和Close,右键Close,设置为默认状态,添加一个标志位Close,用来控制动画的切换,右键Open选择Make Transition,然后指向Close,单击该指向,在出现的面板设置转换条件,当Close 为真的时候转换到关闭状态。
Close指向Open做类似设置,当Close为假的时候转换到打开状态,如图4.6。
2.给门添加Animator组件,把该状态机放进去。
3.给门添加Sphere Collider触发器,调至合适的位置,调整合适的大小,具体可根据游戏运行效果设置,当主角或者机器人进入触发区域,即可调用对应的触发函数完成触发事件,如图
4.7。
4.6 门的状态切换图 4.7 球形触发器
4.给门添加一个AudioSource组件,用来播放门的打开和关闭声音,当主角或者机器人进入触发区域的时候检测有无开门声音正在播放,没有就播放,离开的时候也类似。
5.添加脚本控制门的事件,门的打开与关闭状态是通过计数来判断的,有人就打开,。