基于Unity3d的潜行游戏开发.docx

上传人:b****6 文档编号:7971550 上传时间:2023-01-27 格式:DOCX 页数:40 大小:3.13MB
下载 相关 举报
基于Unity3d的潜行游戏开发.docx_第1页
第1页 / 共40页
基于Unity3d的潜行游戏开发.docx_第2页
第2页 / 共40页
基于Unity3d的潜行游戏开发.docx_第3页
第3页 / 共40页
基于Unity3d的潜行游戏开发.docx_第4页
第4页 / 共40页
基于Unity3d的潜行游戏开发.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

基于Unity3d的潜行游戏开发.docx

《基于Unity3d的潜行游戏开发.docx》由会员分享,可在线阅读,更多相关《基于Unity3d的潜行游戏开发.docx(40页珍藏版)》请在冰豆网上搜索。

基于Unity3d的潜行游戏开发.docx

基于Unity3d的潜行游戏开发

毕业设计论文

课题名称

基于Unity3d的潜行游戏开发

系部

计算机工程系

专业

计算机科学与技术

班级

T1123-2

学号

20110230204

姓名

杨吉乾

指导教师

吴文欢

2015年5月20日

摘要

随着计算机技术的不断发展,游戏制作也慢慢成为社会上不可或缺的一部分,游戏一方面能够给玩家带来生活上的放松,另一方面也是对现实中某些场景的夸张和放大,各种各样的游戏能给玩家带来不同体验,深受广大群众的喜爱,市场需求量很大,因此对游戏的开发和研究也显得很有意义。

而在一系列开发引擎中,Unity3D游戏引擎主要用来制作3D游戏,能够给玩家带来很真实的感受和非常不错的游戏体验,与此同时也能做出效果很好的UI界面,学好Unity3D在未来无论是3D网页的开发还是虚拟现实都会起来不可估量的作用,而本次课题就将通过Unity3D做出一个效果不错的游戏。

本次课题做一个潜行类游戏,主角需要避开敌人、红外线、摄像头的检测,拿到钥匙到达指定目的地,就像军事行动深入敌后。

在整个游戏设计过程中会用到一些数学知识,会用到Mecanim动画系统,会用到状态机,会用到自动导航系统,也要求设计者有很强的逻辑思维和一定的审美标准,也需要对游戏引擎有较为熟练的使用能力。

而在界面的搭建上又需要用到UI知识,懂得如何通过视觉魔术让3D模型显示在2D界面,又能让玩家从2D界面感受3D模型的3D效果,对设计者来说是具有一定的挑战和锻炼意义。

开发的游戏有一定的可玩性,可以满足很多玩家的娱乐需求,也可以用来当作二次开发的模型,做出难度更高、涉及元素更多元化、更复杂的市场游戏,因此,本次课题的研发不仅具有学习研究意义,也有一定的市场价值。

关键词:

Unity3D游戏;潜行游戏开发;Unity3D技术应用

Abstract

Alongwiththedevelopmentofcomputertechnology,gameproductionhasgradually

becometheindispensablepartofthesociety,ontheonehandgamescantakerelationtoplayers,ontheotherhand,it’salsoexaggeratedandamplifiedtosomeoftherealscenes,avarietiesofgamescanbringdifferentexperiencetothegameplayers,lovedbythemasses,themarketdemandisverybig,therefor,it’smeaningfultoresearchanddevelopthegame.Intheseriesofdevelopmentengine,Unity3Dgameengineismainlyusedtomake3Dgames,itcangivetruefeelingsandbringaverygoodexperiencetogameplayers,makeagoodeffectofUIinterfaceatthesametime.LearningUnity3Dwillriseaninestimableroleinthefuturewhetherthedevelopmentof3DWebpageorvirtualreality.ThistopicwillbringagoodgameforyouthroughUnity3Dengine.Thistopicwillbringyouastealthgame,theheroneedstoavoidenemydetection,infrared,camera,getthekeytoarriveatthedesignateddestination.Justlikemilitaryoperationsasbehindenemylines.Itwillusesomemathematicalknowledgeinthegamedesignprocess,andthemecanimanimationsystem,thestatemachine,theautomaticnavigationsystem,italsorequiresdesignerstohavegoodlogicalthoughtandaestheticstandards,andtheabilitiestouseengineverywell.AsforUIdesign,youmustletthe3Dmodelsdisplayinthe2Dpanelthoughvisualmagic,andlettheplayerstastethe3Dmodeleffectsfrom2Dpanel,it’sachallengeandwillletdesignergetsomeexercise.Thegameisfunny,itwillmeetentertainmentneedsofmanygameplayers,italsocanbeusedasamodelwhenyoudothetwicedevelopment,tomakeitmoredifficult,morediversified,morecomplex,andmakeitmarketization,therefor,researchofthistopicnotonlyhassignificanceoflearning,thereisacertainmarketvalue.

KeyWord:

Unity3DGame;StealthGame

Unity3DTechnology

第一章绪论

1.1开发背景及意义

随着计算机的不断普及,各种各样的应用也如雨后春笋层出不穷,而伴随着人们生活水平的日益提高,游戏也变成了人们生活中不可或缺的调味品。

做游戏自然离不开开发引擎,Unity是由UnityTechnologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

Unity类似于Director,Blendergameengine,Virtools或TorqueGameBuilder等利用交互的图形化开发环境为首要方式的软件,其编辑器运行在Windows和MacOSX下,可发布游戏至Windows、Mac、Wii、iPhone、WindowsPhone8和Android平台。

也可以利用Unitywebplayer插件发布网页游戏,支持Mac和Windows网页浏览。

它的网页播放器也被Macwidgets所支持。

除此之外,Unity在虚拟现实中也可以得到广泛应用,本次课题就是想通过主流市场游戏的形式来熟悉和了解Unity的相关技术操作,从而在未来能够在一切都向3D发展的大趋势下游刃有余。

1.2国内外研究现状

90年代初国外的3D游戏就已经开始起步了,第一部3D第一人称射击游戏是美国的卡马克的《重返德军总部》。

国内3D游戏则起始于2003年,相较于国外的3D游戏开发起步要晚了很多,虽然国内大的游戏公司和团队也开发出了自己的引擎,做出了《古剑奇谭》系列,《仙剑奇侠传》系列的游戏,但相比较国外的《魔兽世界》、《模拟人生》等国际游戏大作,无论是从游戏开发理念上还是技术支持上都还有不可逾越的差距,导致大量的财富资金流向国外。

而随着时间的推移,手机也越来越智能化,现在的手机可以说比十几年前的电脑更加强大,也越来越多的应用出现在了手机上,游戏也是不可或缺的一部分,但是不同语言开发工具开发的产品想要移植到手机上需要花费巨大的代价,成本太高,操作很复杂,国外的一款游戏引擎完美的解决了这个问题,那就是Unity3D。

对于Unity3D,国内对其的研究还处于起步阶段,所以我们认真的学习国外的优秀游戏引擎,熟悉其操作,对以后自主研究符合自身需求的引擎有很大的参考价值。

1.3本课题简介

本课题开发一个潜行类的游戏,其中游戏主角将小心的潜入敌人的大本营,通过敏捷的身手,机智的头脑找到所有的电脑控制台关闭所有的激光红外线,在行进过程中需要躲避所有的摄像头检测,尽可能的避免机器人的发现,在被发现后能逃过所有机器人的追捕,最终拿到钥匙进入电梯后从容离开。

在游戏开始会有关于游戏的操作控制说明,也可以选择不同的关卡。

进入游戏后,机器人会进行自主巡逻,主角需要合理的利用潜行,避免被机器人听到脚步声后前来追击,合理的利用地形是制胜的关键,请注意不要碰到红外线,一旦玩家被发现,所有巡逻机器人会前来对你进行围剿,这个时候就将是显示你高超的智商的时刻,冷静、沉着的应对,找到合适的方法,玩家也可以躲避追捕化险为夷。

第二章Unity3D游戏引擎的介绍

2.1API接口

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,选中该图片,更改TextureType的类型变成Sprite即可,如图3.6。

3.6图片属性

2.在该面板内添加一个文本组件,在文本域写上标题Stealth,调整字体大小颜色位置字体等信息,把文本框拖到合适的位置。

3.在界面右上方添加一个图片组件,然后拖一个合适的图片到该组件作为Logo,注意调整锚点位置,方便屏幕自适应,如图3.7。

3.7锚点图

4.在左下方添加一个Button控件,在其背景中拖动一个合适的背景图片进去。

然后创建一个空对象,用来挂载面板控制脚本,脚本主要实现的是对声音面板动画状态机里面的标志位进行修改,实现在不同条件下不同动画的播放,这里我将通过两个函数,分别对动画状态机里面的标志位进行不同修改来实现不同动画的状态转换,当状态机里面标志位“DisplayAudioSetting”为真的时候就会播放声音面板的显示动画,为假的时候就会播放隐藏动画。

在图3.8所示面板添加事件,然后把该对象拖进去即可产生按钮事件,点击后会调用对应的函数进行事件的响应。

3.8Button点击事件图

5.添加一个主角,拖动主角模型到合适的位置,在Project面板中给主角添加一个状态机,Create->AnimatorController,然后把主角的静止动画添加进去,如图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.11Button点击事件图

3.3场景说明界面

1.在左上方添加3D模型,一个为机器人,一个为主角,调整好位置放置,给主角添加动画状态机,将其跑动动画放入,然后给主角添加Animator组件,拖入该动画状态机,注意查看该动画,需要修改部分属性,固定跑动使其不产生位移,如图3.12。

在其下方合适位置添加text组件,附上文字说明。

3.12Run动画设置

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(PointerEventDataeventData)方法是在鼠标开始拖动的时候启用,可以记录鼠标开始拖动的位置,OnDrag(PointerEventDataeventData)则是在鼠标拖动过程中调用,可以用来记录鼠标最新的位置,在此用来记录当前的位置,用鼠标左键抬起时结束该函数的运行,用此时鼠标的位置减去开始的位置可以得到一个方向向量,通过调用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.给激光添加一个BoxCollider,勾选IsTrigger设置其为触发器,用来控制触发检测的,有了该触发器,当对象进入触发区域即可调用对应的函数,见图4.5。

4.3灯光属性4.4声音组件4.5触发器

4.给激光添加脚本,用来控制触发响应事件和激光特性。

在本游戏中激光有两种状态,其中一种是一直存在的,另一种是闪烁变化的。

为了区分两种激光,设置一个标志位isFlicker,当其为真的时候代表闪烁激光,为假代表不可闪烁激光。

主角有一个tag标签,所有激光,当碰撞的对象的标签是主角的时候就会控制警报声的响起,并记录主角碰撞的位置信息通知机器人前去追捕击杀。

而对于闪烁激光,通过一个计时器控制闪烁的时间周期,当关闭周期到了使其关闭渲染,关闭触发器,当开启周期到了打开渲染,打开触发器。

5.在Project面板建立一个空的文件夹,用来放置Prefabs,把Hierarchy面板中的激光拖进去做成预制,预制的作用即是克隆,以预制物体为母本,其它所有该物体均为克隆体,当发现有需要改动的地方,改动母体之后,所有克隆体都会修改,用起来很方便。

在合适的位置添加该预制,可实现所有激光特性和预制一样,在靠近电梯的两个激光,勾选isFlicker,设置按灭时间,使其实现闪烁效果。

4.1.2感应门设计

1.先给门做一个AnimatorController,添加动画状态机Open和Close,右键Close,设置为默认状态,添加一个标志位Close,用来控制动画的切换,右键Open选择MakeTransition,然后指向Close,单击该指向,在出现的面板设置转换条件,当Close为真的时候转换到关闭状态。

Close指向Open做类似设置,当Close为假的时候转换到打开状态,如图4.6。

2.给门添加Animator组件,把该状态机放进去。

3.给门添加SphereCollider触发器,调至合适的位置,调整合适的大小,具体可根据游戏运行效果设置,当主角或者机器人进入触发区域,即可调用对应的触发函数完成触发事件,如图4.7。

4.6门的状态切换图4.7球形触发器

4.给门添加一个AudioSource组件,用来播放门的打开和关闭声音,当主角或者机器人进入触发区域的时候检测有无开门声音正在播放,没有就播放,离开的时候也类似。

5.添加脚本控制门的事件,门的打开与关闭状态是通过计数来判断的,有人就打开,没人就关闭。

在一开始需要得到门动画的引用,设置一个变量控制是否感应到有对象进入,当门的触发区域没有游戏对象,就设置动画为关闭状态,当触发区域有对象进入,计数器加一,此时设置动画为打开状态。

需要注意的是机器人身上不仅有碰撞器,也同时有范围很大的触发器,需要设置判定条件,只有碰撞对象是机器人并且为机器人的碰撞器进入到门的触发范围才能计数器的自加。

在游戏中还有一种是电梯的门,该门需要钥匙才能打开,只有在持有钥匙,并且触发对象是主角的情况下门才会打开,需要设置一个标志位,用来控制是否需要钥匙的门,当主角持有钥匙进入计数器才会加一,否则进入触发区域会播放一个拒绝的声音。

当对象离开的时候需要做相反的设置,进入调用OnTriggerEnter()函数,该函数会在进入触发区域时调用一次,离开用OnTriggerExit()函数,该函数会在离开触发区域时调用一次。

6.把门做成预制,在合适的位置添加门。

4.1.3监控器设计

1.先把摄像机拖至

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1