基于Unity的射击类游戏开发.docx
《基于Unity的射击类游戏开发.docx》由会员分享,可在线阅读,更多相关《基于Unity的射击类游戏开发.docx(58页珍藏版)》请在冰豆网上搜索。
基于Unity的射击类游戏开发
南京工程学院
毕业设计说明书(论文)
作者:
学号:
院系:
专业:
计算机科学与技术
题目:
基于Unity的射击类游戏开发
指导者:
评阅者:
2013年6月
毕业设计说明书(论文)中文摘要
随着虚拟现实和游戏事业的快速发展,unity3D作为一款能够快速开发和应用的3D虚拟现实开发软在市场上正在逐步升温。
文本的主要内容是介绍用unity3D软件做一款简单的射击类游戏。
本文从前期的相关技术介绍、开发软件系统以及环境的介绍、项目的功能需求分析和详细设计、系统的运行、成品的打包等方面介绍了系统的开发过程。
本设计主要为坦克类的射击游戏,设计平台为unity3D3.5.5版本,系统中还用到了3dsMAX软件,photoshop软件中的一些相关技术,设计语言使用的是C#语言,系统主要实现一些模型移动、开火等基本的相关操作并在此基础上能够充分发挥开发者的能力进行更多复杂的逻辑设计。
关键字3D技术unity3D射击类游戏
毕业设计说明书(论文)外文摘要
TitleTheshuttinggameimplementbasedonUnity3D
Abstract
Withtherapiddevelopmentofvirtualrealityandgamecareer,unity3Dasarapiddevelopmentandapplicationofthe3Dvirtualrealitysoftwareonthemarketisgraduallywarmingup.Maincontentofthetextistointroducetheusingunity3Dsoftwaretodesignasimpleshootinggame.
Thispaperintroducesthesystemdevelopmentprocesssuchastherelatedtechnology,thedevelopmentofsoftwaresystem,theprojectfunctionanalysisanddesign,systemimplementation,systemtesting,.Thedesignofthemainistankclassshootinggame.Thdesignplatformistheunity3Dversionof3.5.5,thesystemalsouses3dsMAXsoftware.somerelatedtechnologiesusesPhotoshopsoftwaretofinishanddesignlanguageisusedC#language.systemismainlytoachievesomemodelofmoveing,fireandotherbasicrelatedoperations.onthisbasis,thedesigneralsocangivemoreabilitiesformorecomplexlogicdesign.
Keywords 3DTechnologyUnity3Dtheshootinggame
目 录
前 言
随着社会科技水平和经济水平的迅速发展,虚拟现实技术逐步的迈入人们生活,其涉及的领域十分广泛,在商业、游戏等有着惊人的发展,正因为如此Unity3D作为一款虚拟3D开发的软件正在逐步升温,他以其跨平台的优势,良好的界面环境,强大的功能设计渐渐的被广大虚拟现实的设计者们所使用。
本文详细介绍了采用unity3D软件,设计一个射击类游戏,模仿的是现实坦克的射击,并在此基础上发挥制作者的创新力和设计能力。
Unity3D开发软件是一款多平台的综合性的开发工具,Unity相似于Director,Blendergameengine,Virtools等使用交互的图型化的集成开发环境为首要处理方式的软件,其编辑器能够运行在时下主流的Windows和MacOSX下,制作的成品可发布至Windows、Mac、Wii、iPhone以及安卓平台。
该软件支持的语言包括C#,JS等高级脚本语言。
其功能强大,API丰富,因此开发者们不必要去自己写相关的方法,这样就给与开发者们更多创新的时间与空间。
本游戏界面简单友好,游戏内容丰富,功能包括坦克的开炮,移动,游戏中还包括敌人,道具的获得和技能的使用等。
第一章绪论
1.1引言
无论是3D化的谷歌地图,还是现在脍炙人口3D游戏,甚至是集娱乐和运动于一体的室内体感游戏,这一切都是虚拟现实技术的应用。
如今的社会,不仅仅是游戏,3D技术已经被广泛的开发并且用作商业应用,比如模拟车展,火箭升空,3D旅行等,因此,在3D虚拟如此盛行的今天,用Unity3D做一款3D游戏也算是赶上时代的脉搏了。
Unity3D其开发的综合性平台和其丰富的脚本语言,开发界面友好,功能强大等有利因素,被我选择作为制作一款射击类游戏的开发工具。
通过对3D游戏的设计,来充分了解虚拟现实在社会中的应用以及如何将该技术广泛的应用在各大领域。
该软件的各项功能,让我发现了很多游戏以及3D技术使用的影子。
比如我们了解的第三人称与第一人称之间的来回切换,在U3D中完成这一操作仅仅只要对摄像机使用脚本语言来回切换,因为U3D丰富并强大的API使得原本在虚拟世界中看起来复杂的行为变得简单易得,这就是U3D为什么如此火的原因。
在本篇论文中,第一章主要介绍了虚拟现实的使用领域、发展和研究内容,第二章主要介绍了完成该游戏所用的到软件以及涉及到的技术知识,第三章主要介绍了系统的需求分析、系统的整体设计和详细设计,第四章主要介绍了游戏完成的整个过程、游戏的创意性设计、游戏的打包和导出。
第五章主要介绍游戏运行结果。
1.2研究内容
运用Unity3D软件,结合photoshop、3Dmax等基础的使用方法,完成一个简单的设计类游戏,该游戏涉及到得是坦克的现实模拟,能够使模型完成开火等一系列的运动方式,并在此基础上做一些创新性的实施。
1.3本章小结
本章主要介绍了3D虚拟技术的应用领域和现状,Unity3D开发3D游戏的优势以及本文主要的研究内容。
第二章技术介绍
2.1Unity3D软件概述
Unity3D(以下简称U3D)是一款3D跨平台次世代游戏引擎。
1)提供了非常完美的跨平台系统。
平台之间的差别常常会影响到产品的开发速度和进度,因此大部分开发者们要在这上面花费大量的时间,而unity则能在近10种主流平台之间完美移植。
2)提供了多种脚本语言编译的常用环境,并且可以根据需求将默认的编译环境做出调整。
Unity3D支持C#、Javascript、Boo三种脚本语言。
3)提供了一个交互良好的操作界面,能够完美的在windows和MacOS下部署。
该软件自带的五个工程视图框架能够让你很好的观察你制作游戏的进程。
Unity3D丰富的API能够帮你完成各种想要完成的需求。
它的界面系统能够更好的帮助设计者分类游戏中的对象。
其中包括project视图,该视图主要存放游戏中的资源文件,hierarchy视图主要放置游戏场景中具体的游戏对象,inspector视图主要来描述游戏资源的信息,scene视图主要存放游戏中模型资源,game视图是用来观察已经完成的游戏运行成果。
2.2C#介绍
MicrosoftVisualC#(读作Csharp)是一种常用的编程语言。
C#语法很简单、功能非常强大、类型相对安全,并且是面向对象的。
C#凭借着它创新的心法,在保证C语言样式的表现方式的同时,完全实现了应用程序的相对快速的开发,该语言作为U3D中的脚本语言能够更好的符合他面向对象的特征。
2.3Visualstudio2010
Visualstudio2010(以下简称VS10)是微软公司自主推出的开发环境。
其中它支持了最新的集成开发环境。
VS10也带来了NETFramework4.0、MicrosoftVisualStudio2010CTP并且支持开发者面向win7的应用程序开发。
除了MicrosoftSQLSever,它还支持IBM,Oracle数据库等。
2.4Photoshop简介
AdobePhotoshop,简称“PS”,是由AdobeSystems开发并发行的一款图像处理软件。
Photoshop主要用来处理以像素所构成的数字图像。
使用其丰富的修改编辑工具与绘图工具,可以更高效良好的进行图片编辑工作。
2.53dsMax简介
3DStudioMax,简称为3dsMax或MAX,是discreet公司开发的一款基于PC操作系统的三维动画渲染和三维对象制作软件。
其前身是基于DOS操作系统的3DStudio软件。
在windowsNET出现之前,专业级的CG制作被SGI图形工作站所垄断。
3DStudioMax+WindowsNT组合的出现瞬间就降低了CG制作的难度,软件初始时是运用于电脑游戏中制作动画,后进一步用于参与影视片中的特效制作。
2.6系统开发运行环境
操作系统:
MicrosoftWindowsXP
开发环境:
Unity3D3.5.5
开发工具:
MicrosoftVisualStudio2010Photoshop3dsmax9.0
开发语言:
C#语言
2.8本章小结
本章主要介绍了制作射击类游戏所用到得开发工具、开发语言和所用到得相关技术以及系统开发运行的环境。
第三章系统的需求分析和设计
3.1需求分析
游戏需要一个开始界面用来开始游戏、了解游戏的玩法、以及退出游戏,初始界面至少要有这三个选项。
场景的设计以及各种触发事件,并且在此基础上有所创新。
在游戏的GUI上面有主角的血条,装填炮弹,还有一些创新性的技能设计,让游戏更加丰富多彩。
游戏中还应该存在敌人,敌人会主动瞄准主角并攻击。
3.2系统的设计
3.2.1系统的开始界面设计
系统包括场景1和场景2。
场景1中所要设计的就是游戏的开始界面。
界面中包含了3个按钮,分别完成各项功能。
按钮1)开始游戏:
用来进入场景2,即进入游戏。
用户只要通过鼠标按下该按钮,就可以载入所要进行的游戏。
按钮2)游戏帮助:
用来进入帮助界面。
帮助界面主要用来告知玩家如何进行游戏等等注意事项。
为一些刚解除该游戏的玩家提供帮助。
按钮3)退出游戏:
主要用来退出游戏。
3.2.2系统的场景设计
系统中的场景2就是我们所要进行游戏的场景。
场景中包含的对象有:
1)地形:
对象都放在这上面。
还包括一些植物和水池。
2)主角对象:
这里的主角对象是一辆坦克,包括了坦克的移动、开火、还有与其相关联的GUI。
3)敌方对象:
这里的对象包括的敌方的坦克,炮台等,他们都有自己的AI。
4)特殊道具:
有些特殊道具可以被摧毁。
有些特殊道具可以被拾取并触发有意思的事件。
3.3本章小结
本章对该游戏进行了一些需求和系统的分析,整体列出来了该游戏中所要包含的一切对象,下一章就是要具体设计这些对象并给予逻辑命令。
第四章游戏系统的实现
4.1Unity3D软件的界面
图4-1Unity3D界面
Unity3D的交互界面非常友好,并且能够变换多种视图分布方式直到你找到最合适自己的分布方式。
工具栏中的window->Layouts里面有很多分布选项。
4.2游戏开始界面制作
图4-2创建工程
在制作开始界面之前,我们应该创建一个工程,在工具栏中选择File->Newproject菜单项,之后则会弹出ProjectWizard,选择CreatenewProject,在ProjectDirectory中点击Set按钮设置游戏工程保存路径与项目名称,然后再点击Importthefollowingpackages中引入系统提供的标准资源包。
为了更好的将对象分类,我们首先应该在project视图中创建几个文件夹名字分别为界面,在界面字文件夹中再创建贴图文件夹,这些文件夹用来分类放置你所需要的东西。
我们在网上搜索了几张开始界面以及游戏结束的背景图,放在贴图文件夹中以便制作背景时使用。
在制作背景之前,我们首先应该将U3D默认的脚本编辑器设置为VS10,在Edit中的preference中可以设置。
我们在project中创建一个C#脚本。
首先我们使用GUI.DrawTexture(newRect(0,0,Screen.width,Screen.height),textureBG)方法来给整个屏幕附上textureBG贴图,rect方法是用来创建一个矩形框,它的参数表示Rect(距离左边屏幕的距离,距离上边屏幕的距离,举行的宽,矩形的高),这是制作界面背景的一种方法。
然后我们使用状态机的方法来给界面设计他的执行按钮所要完成的需求。
在我们创建一个C#脚本的时候,已经默认的继承MonoBehaviour接口,因此在VS10中会自动生成两个方法,分别为voidstart()函数,该函数用来给游戏刚开始时给对象赋予的操作,只在项目开始的时候执行一次,voidupdate()函数式在每一帧都执行这里面的代码。
我们在游戏的脚本代码中给摄像机赋予了4种状态机,分别是当前画面状态,开始后的状态,按下帮助后的状态,按下退出后的状态,分别给这些状态写了方法,即mainmenu(),helpmenu(),quitmenu()。
具体脚本代码和结果如图4-3所示:
usingUnityEngine;
usingSystem.Collections;
publicclassjiemian:
MonoBehaviour{
privateconstintgame_main=0;
privateconstintgame_start=1;
privateconstintgame_quit=2;
privateconstintgame_help=3;
publicGUISkinmySkin;
publicTexturetextureBG;//背景贴图接口
publicTexturetexturetuichu;//退出贴图
publicTexturetexturebangzhu;
privateintgamenow;//当前游戏状态
voidStart(){
gamenow=game_main;
}
voidOnGUI()
{
switch(gamenow)
{casegame_main:
mainmenu();
break;
casegame_start:
Application.LoadLevel("场景1");
break;
casegame_help:
helpmenu();
break;
casegame_quit:
quitmenu();
break;
}
}
voidmainmenu()
{
GUI.skin=mySkin;
GUI.DrawTexture(newRect(0,0,Screen.width,Screen.height),textureBG);
if(GUI.Button(newRect(0,20,150,50),"开始游戏"))
{
gamenow=game_start;
}
if(GUI.Button(newRect(0,500,120,50),"结束游戏"))
{
gamenow=game_quit;
}
if(GUI.Button(newRect(0,250,150,50),"帮助"))
{
gamenow=game_help;
}
}
voidhelpmenu()
{
GUI.skin=mySkin;
GUI.DrawTexture(newRect(0,0,Screen.width,Screen.height),texturebangzhu);
if(GUI.Button(newRect(0,500,150,50),"返回"))
{
gamenow=game_main;
}
}
voidquitmenu()
{
GUI.skin=mySkin;
GUI.DrawTexture(newRect(0,0,Screen.width,Screen.height),texturetuichu);
/*if(GUI.Button(newRect(0,200,150,50),"返回"))
{
gamenow=game_main;
}*/
}
//Usethisforinitialization
//Updateiscalledonceperframe
voidUpdate(){}
}
脚本代码完成后,将这段脚本拖给界面中的主摄像机,如图4-3所示:
图4-3赋予给摄像机脚本
然后单击主摄像机,会发现右下角多出了一个脚本控制,然后将刚在在脚本中创建的图片接口用适当的图片拖入,这样就可以完成相应的界面设计了。
具体界面成果如图4-4所示:
图4-4制作完成的界面
4.3游戏的制作
游戏的界面已经基本完成,Unity3D中不仅有自带的按钮格式,更可以自己定义按钮的风格。
在界面中我就自己定义了按钮的风格,使鼠标放在按钮上,按钮会产生一个碎裂的效果。
游戏的制作将分为三块,第一块就是场景的制作,使对象在具体的一个场景环境中活动,第二块就是对象的制作,包含场景中的静态对象和动态对象,第三块就是创新设计。
4.3.1场景的制作
Unity中自带的平面系统能很好的为我们创建我们想到要的地形场景。
在工具栏中选择Terrain->CreateTerrain便可以创建一个平面。
图4-5创建一个自带平面
在Terrain中的SET…..选项中可以修改平面的大小,我们在最右侧视图中可以发现该平面的属性,在Terrain(sprict)下的几个按钮可以用来修饰平面,前三个按钮可以将平台的地势加高,加平缓,第四个按钮是用来给平面附上地形贴图,第五个按钮是用来创造树,第六个按钮是用来创造花草植物,按下EditDetails便可以为这些物体选择所需的贴图。
在刚刚创建的平面中我们发现整个场景都十分灰暗,这是就要在CreateObject选项中的CreateOther中选择Directionlight来放在场景中,你会发现场景变得更加亮了。
为了让整个场景更加唯美,U3D中自带了天空盒系统(SKYBOX),
在工具栏中选择Edit->RenderSteting菜单,打开渲染设置的界面,在SkyboxMaterial选项中设置天空盒的材质,即将天空盒包中的天空盒材质拖入其中便可。
这样美轮美奂的场景就基本设置完成了。
在创建工程时我们还导入了水体的包裹,这样我们也可以在场景中还可以加入一些水体效果。
图4-6完成后的地形
U3D中自带的地形编辑器功能十分强大,可以打造任何你想要的场景,沙漠、雪山任何你想到的场景风格,他基本都能模拟出来。
上图就是我个人制作的地形。
4.3.2游戏对象的制作
4.3.2.1主角对象
1)主角模型
首先我们要将玩家所要控制的对象设计出来,即主角对象,这里使用的是一款坦克模型。
在网上找到相应的坦克模型的.max文件,而Unity3D(一下简称U3D)所支持的是.FBX模型,这里我将.max模型文件导入到3DSmax中,再将其的格式导出为.FBX格式,这样就可以将该模型拖入到U3D中了。
图4-7主角的设计
2)移动方式
在场景中调整好坦克的大小之后,就必须要给坦克主角添加行动脚本了。
现实中的坦克只能往前移动,并不能左右平移,但可以原地旋转身体。
U3D中使用方法transform.Translate()来移动身体,此方法的唯一参数为平移模型的方向。
使用方法transform.Rotate()来旋转身体,此方法的参数为旋转的速度和旋转方向。
具体代码为:
usingUnityEngine;
usingSystem.Collections;
publicclassshentiyidong:
MonoBehaviour{
privateintspeed=10;
privateGameObjectobj;
//privateintspeedrotate=20;
//Usethisforinitialization
voidStart(){
}
//Updateiscalledonceperframe
voidUpdate()
{
//if(fashe.baozoumoshi==0)
{
if(Input.GetKey(KeyCode.W))
{
transform.Translate(Vector3.forward*Time.deltaTime*speed);
}
if(Input.GetKey(KeyCode.S))
{
transform.Translate(Vector3.forward*Time.deltaTime*-speed);
}
if(Input.GetKey(KeyCode.A))
{
transform.Rotate(newVector3(0,-2,0));
}
if(Input.GetKey(KeyCode.D))
{
transform.Rotate(newVector3(0,2,0));
}
}
}
将这一段脚本代码拖入到整个坦克中,就可以在场景中实现坦克的前后移动和身体的旋转,其中Vector3这是一个方向容器,其中参数表示(X轴,Y轴,Z轴)。
3)炮头旋转
之后我们来设计坦克的炮头旋转方式,方法任然为Rotate()方法
具体代码为:
usingUnityEngine;
usingSystem.Collections;
publicclassNxuanzhuanpaotou:
MonoBehaviour{
privateintspeed=100;
//Usethisforinitialization
voidStart(){
}
//Updateiscalledonceperframe
voidUpdate(){
transform.Rotate(newVector3(0,0,Input.GetAxis("MouseX"))*Time.deltaTime*speed);
}