unity3d小游戏开发星空大战毕业实训报告大学论文.docx

上传人:b****8 文档编号:10541346 上传时间:2023-02-21 格式:DOCX 页数:25 大小:700.31KB
下载 相关 举报
unity3d小游戏开发星空大战毕业实训报告大学论文.docx_第1页
第1页 / 共25页
unity3d小游戏开发星空大战毕业实训报告大学论文.docx_第2页
第2页 / 共25页
unity3d小游戏开发星空大战毕业实训报告大学论文.docx_第3页
第3页 / 共25页
unity3d小游戏开发星空大战毕业实训报告大学论文.docx_第4页
第4页 / 共25页
unity3d小游戏开发星空大战毕业实训报告大学论文.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

unity3d小游戏开发星空大战毕业实训报告大学论文.docx

《unity3d小游戏开发星空大战毕业实训报告大学论文.docx》由会员分享,可在线阅读,更多相关《unity3d小游戏开发星空大战毕业实训报告大学论文.docx(25页珍藏版)》请在冰豆网上搜索。

unity3d小游戏开发星空大战毕业实训报告大学论文.docx

unity3d小游戏开发星空大战毕业实训报告大学论文

 

 

毕业实训报告

 

课题名称:

Unity游戏开发

专业:

移动开发

班级:

学号:

学生姓名:

指导教师:

 

年月日

 

中原工学院

毕业实训任务书

年月9日

学生姓名

学号

专业

软件开发

班级

课题名称

Unity3D小游戏开发(星空大战)

课题来源

指导教师

专业

软件工程

职称

讲师

课题说明:

开发路线:

1,游戏背景(连续播放)

2,添加主角

3,设置游戏主角的动画

4,添加两种子弹并设置子弹的运动

5,添加三种子弹

设置子弹的自动生成和运动

6,添加两种奖励物品

设置奖励物品的自动生成和运动

7,设置主角的控制

7.1检测手指触摸

7.2问题:

防止主角飞出屏幕

8,设置Tag

添加子弹和敌人的碰撞

9,设计敌人012震动动画和爆炸效果

10,添加脚本GameManager做游戏的控制

11,统计分数

 

摘要

摘要游戏,目前已经是最大众化的娱乐之一,而其中的3D游戏也是技术含量较高的项目之一。

Unity3D是一个3D/2D游戏开发工具和游戏引擎套件,其中包括了图形、音频、物理、网络等多方面的引擎支持,并且有一个非常强大的编辑器来整合这一切,非常适合于游戏开发。

本文主要是以Unity5.3.8为开发环境,设计并开发一款单机版的三维游戏——直升机大战,旨在介绍直升机战斗游戏的实现方法,并逐步介绍使用Unity3D开发3D游戏的方法和技巧。

通过这次游戏制作,使我体会到了,制作一个游戏所需要做的工作,包括前期的游戏策划,素材的制作,到后期的游戏的设计,代码实现等,最终形成一个完整的3D游戏,并通过Unity3D选择平台生成可执行文件。

但本次设计的直升机战斗游戏所做工作还不够完善,开始场景中菜单比较简单,游戏中武器只有一种,关卡也只有一个,这些都需要以后进一步设计.

 

第1章项目分析

1.1Unity及其组成的介绍

本书主要讲解的是,如何使用Unity开发2D游戏。

但在开始讲解之前,最好先熟悉一下Unity这个工具。

本章会首先介绍Unity的下载和安装,然后会介绍Unity界面的各组成部分,这些知识会在本书后面的章节频繁使用,所以不要掉以轻心。

1.2Unity概述

Unity现如今已是非常的流行,因此在开始学习2D游戏开发之前,本节就来简要说明下Unity,及其下载和安装方法。

1.Unity简介Unity是一款跨平台的专业游戏引擎,可以使用它轻松的开发各种2D和3D游戏,然后部署到各种游戏平台上。

当然也包括这些主流游戏平台:

Windows、iOS、Android、Xbox360、PS3。

第2章

2.1需求分析

玩家:

控制游戏中的战机,向敌机发出攻击;

敌机:

敌机不会发射子弹攻击玩家,boss敌机由程序控制自动向玩家飞机发出攻击

子弹:

玩家和boss敌机都拥有自己的子弹,玩家的子弹可以用来攻击所有的敌机

子弹礼包:

玩家飞机得到子弹礼包后,玩家的飞机会在一段时间内有发射双排子弹功能

炸弹礼包:

玩家飞机得到子弹礼包后,玩家飞机如果使用炸弹可以清除屏幕上除boss外的所有敌机。

2.2功能需求:

1》用户进入游戏开始菜单可以选择开始游戏,退出游戏,游戏帮助;

2》进入游戏后可暂停游戏

3》玩家飞机以一定速度自下而上飞行,用户可以控制飞机前后左右移动

4》玩家飞机一直发子弹,用户通过控制飞机位置来扫描敌机;

5》不同种类的敌机以一定速度随机出现;

6》玩家飞机的发射子弹击中敌机后消失。

7》玩家飞机达到一定分数后,程序会随机提供子弹包和炸弹包;》

8》玩家与礼包碰撞后即可得到礼包;

9》弹礼包后,玩家的飞机会在一段时间内有发射双排子弹功能

10》进行游戏时,屏幕左上角会显示用户达到的分数;

2.3用户功能需求

由于本游戏交互性好,简单易操作,对用户并没有特殊的要求。

一般用户经过几分钟后就可以掌握游戏规则。

2.4游戏性能需求

1)实时性:

本应用为手机游戏对于用户操作必须做出立即响应,否则本游戏失败

2)单机手机游戏最大的特点纪委已操作行,用户在不看说明的情况下也能够玩,并且

在玩过几遍之后即熟悉本游戏规则。

这是本应用对于操作性的要求。

2.5游戏流程:

如图2.5-1

第3章场景设计

3.1.创建游戏场景

1.由于创建的是2d项目,则将图片拖入Scene中,该图片自动成为一个精灵,所以将图片信息拖入摆放即可。

如图3-1-1所示

2.下面创建一个GameManager文件,其绑定在摄像机中,主要负责飞机生命,玩家得分,背景播放等的显示功能。

而生命,得分的显示需要我们创建GUIText来摆放。

publicenumGameState{

Runing,

Pause

}

publicclassGameManager:

MonoBehaviour{

publicstaticGameManager_instance;

publicintscore=0;

privateGUITextguiText;

publicGameStategameState=GameState.Runing;

voidAwake(){

_instance=this;

guiText=GameObject.FindGameObjectWithTag("ScoreGUI").GetComponent();

}

//Updateiscalledonceperframe

voidUpdate(){

guiText.text="Score:

"+score;

}

publicvoidtransfromGameState(){

if(gameState==GameState.Runing){

pauseGame();

}elseif(gameState==GameState.Pause){

continueGame();

}

}

3.然后我们来实现背景的滚动。

首先创建两个一样的背景图片上下摆放,如下图所示,这里切换到3d模式,更加形象

如图3-1-3

4.下面创建用于绑定在背景上的脚本BackgroundTransform,代码如下

publicclassBackgroundTransform:

MonoBehaviour{

publicstaticfloatmoveSpeed=2f;

//Updateiscalledonceperframe

voidUpdate(){

this.transform.Translate(Vector3.down*moveSpeed*Time.deltaTime);

Vector3postion=this.transform.position;

if(postion.y<=-8.52f){

this.transform.position=newVector3(postion.x,postion.y+8.52f*2,postion.z);

}

}

}

然后将脚本绑定在两张背景图上即可。

 

5.主角创建与背景创建基本一样,也是可以用一张2d贴图,就不多说了。

主角脚本主要处理移动,发射子弹,处理碰撞等,代码如下:

publicclassBullet:

MonoBehaviour{

publicfloatspeed=2;

//Updateiscalledonceperframe

voidUpdate(){

transform.Translate(Vector3.up*speed*Time.deltaTime);

if(transform.position.y>4.3f){

Destroy(this.gameObject);

}

}

voidOnTriggerEnter2D(Collider2Dother){

if(other.tag=="Enemy"){

if(!

other.GetComponent().isDeath){

other.gameObject.SendMessage("BeHit");

GameObject.Destroy(this.gameObject);

}

}

6.上面代码中我用了bulletTop,bulletLeft,bullfight,这是我为主机添加的两个子对象,主要是用于发射子弹,相当于炮筒吧,而bullet则是定义的预设,其中绑定的脚本后面会说明。

3-1-6

代码实现如下:

publicclassGun:

MonoBehaviour{

publicfloatrate=0.2f;

publicGameObjectbullet;

 

publicvoidfire(){

GameObject.Instantiate(bullet,transform.position,Quaternion.identity);

}

publicvoidopenFire(){

InvokeRepeating("fire",1,rate);

}

publicvoidstopFire(){

CancelInvoke("fire");

}

好了,通过以上的代码我们就可以按键盘的方向键移动飞机,按空格键发射子弹了,我已经等不及要打敌人了。

 

3.2创建敌机

1.敌机也是先拖入敌机图片,然后绑定脚本,添加组件,然后保存为预设,我们以后还有个敌机生产器要生产敌机呢。

我创建了三种敌机预设

3-2-1敌机预制

2.敌机主要是移动,碰撞。

下面来看看敌机脚本:

publicenumEnemyType{

smallEnemy,

middleEnemy,

bigEnemy

}

publicclassEnemy:

MonoBehaviour{

publicinthp=1;

publicfloatspeed=2;

publicintscore=100;

publicEnemyTypetype=EnemyType.smallEnemy;

publicboolisDeath=false;

publicSprite[]explosionSprites;

privatefloattimer=0;

publicintexplosionAnimationFrame=10;

privateSpriteRendererrender;

publicfloathitTimer=0.2f;

privatefloatresetHitTime;

publicSprite[]hitSprites;

//Usethisforinitialization

voidStart(){

render=this.GetComponent();

resetHitTime=hitTimer;

hitTimer=0;

}

//Updateiscalledonceperframe

voidUpdate(){

this.transform.Translate(Vector3.down*speed*Time.deltaTime);

if(this.transform.position.y<=-5.6f){

Destroy(this.gameObject);

}

if(isDeath){

timer+=Time.deltaTime;//0

intframeIndex=(int)(timer/(1f/explosionAnimationFrame));

if(frameIndex>=explosionSprites.Length){

//destroy

Destroy(this.gameObject);

}else{

render.sprite=explosionSprites[frameIndex];

}

}else{

if(type==EnemyType.middleEnemy||type==EnemyType.bigEnemy){

if(hitTimer>=0){

hitTimer-=Time.deltaTime;

intframeIndex=(int)((resetHitTime-hitTimer)/(1f/explosionAnimationFrame));

frameIndex%=2;

render.sprite=hitSprites[frameIndex];

}

}

}

if(Input.GetKeyDown(KeyCode.Space)&&BombManager._instance.count>0){

toDie();

}

}

publicvoidBeHit(){

hp-=1;

//explosion

if(hp<=0){

toDie();

}else{

hitTimer=resetHitTime;

}

}

privatevoidtoDie(){

if(!

isDeath){

isDeath=true;

GameManager._instance.score+=score;

}

}

 

}

3-2-2

3.上面使用到了一个动画,就是敌机爆炸时的动画。

那么如何创建动画呢?

首先资源中可以拖动一组连续的爆炸图片到场景中,系统会自动提醒创建动画,命名为explosion即可。

然后Project视图中就出现了一个animation和一个animator。

在菜单栏找到Windows->Animation和Winodws->Animator可以打开如下窗口。

如图3-1-3

如图3-1-3-1

4.下面是敌机生产器,在主界面的左右两边的顶部分别放上两个空物体用来创建敌机。

敌机创建时间为1~3秒不等,然后绑定创建脚本即可。

publicclassSpawn:

MonoBehaviour{

publicGameObjectenemy0Prefab;

publicGameObjectenemy1Prefab;

publicGameObjectenemy2Prefab;

publicGameObjectawardType0Prefab;

publicGameObjectawardType1Prefab;

publicfloatenemy0Rate=0.5f;

publicfloatenemy1Rate=5f;

publicfloatenemy2Rate=8f;

publicfloatawardType0Rate=7;

publicfloatawardType1Rate=10;

//Usethisforinitialization

voidStart(){

InvokeRepeating("createEnemy0",1,enemy0Rate);

InvokeRepeating("createEnemy1",3,enemy1Rate);

InvokeRepeating("createEnemy2",6,enemy2Rate);

InvokeRepeating("createAwardType0",10,awardType0Rate);

InvokeRepeating("createAwardType1",10,awardType1Rate);

 

}

//Updateiscalledonceperframe

voidUpdate(){

}

publicvoidcreateEnemy0(){

floatx=Random.Range(-2.15f,2.15f);

GameObject.Instantiate(enemy0Prefab,newVector3(x,transform.position.y,0),Quaternion.identity);

}

publicvoidcreateEnemy1(){

floatx=Random.Range(-2.04f,2.04f);

GameObject.Instantiate(enemy1Prefab,newVector3(x,transform.position.y,0),Quaternion.identity);

}

publicvoidcreateEnemy2(){

floatx=Random.Range(-2.04f,2.04f);

GameObject.Instantiate(enemy2Prefab,newVector3(x,transform.position.y,0),Quaternion.identity);

}

 

publicvoidcreateAwardType0(){

GetComponent().Play();

floatx=Random.Range(-2.1f,2.1f);

GameObject.Instantiate(awardType0Prefab,newVector3(x,transform.position.y,0),Quaternion.identity);

}

publicvoidcreateAwardType1(){

GetComponent().Play();

floatx=Random.Range(-2.1f,2.1f);

GameObject.Instantiate(awardType1Prefab,newVector3(x,transform.position.y,0),Quaternion.identity);

}

}

5.关于碰撞检测

敌机碰撞,如果碰到了敌机死亡:

3-1-5.1

敌机碰撞,由于只要碰撞就死亡,所以动画帧执行时间快,死亡很快。

运行界面:

3-1-5.2

3.2UI设计:

每次打死敌机加分,三种不同的加分分数,分别5,10,15分。

在游戏界面编辑创建游戏Text,记录分数,以及退出时记录最高成绩。

重新开始按钮,和退出成绩按钮Button组件。

如图视窗所示:

3-2-1

Ok!

下面开始通过代码来控制程序的显示和执行:

3-2-2

运行程序效果:

死亡时保存记录最高分

3-2-3

可以看出图中我设计了奖励,保存为预制体

如果吃到奖励增加左右子弹的发射攻击敌机

3-2-4

控制奖励的移动逻辑:

3-2-5

运行如下:

3-2-6

游戏结束时点击退出和重新开始执行不同的事件。

退出:

3-2-7退出代码图

重新开始就再次开始重玩即可。

第4章

 

 

第五章结束语

本章是对整个实训过程的总结,首先总结实训完成情况(很好完成、较好完成、还是未完成等),要具体说明开发效果,有哪些不足,有哪些待改进;然后总结自己的心得体会,有哪些收获,有哪些经验,遇到了什么问题,是如何解决的,对整个行业的认识有什么提高,对自己的优势劣势有什么认识等等,内容不限。

参考文献

[1]童爱红.VisualC#.NET应用教程[M].北京:

人民邮电出版社,2004.3

[2]李兰友杨晓光.VisualC#.NET程序设计[M]北京:

清华大学出版社,2004.5

[3]韩玉民.计算机专业英语教学研究与实践[J].计算机与信息技术,2008,(6):

106-107.

[4]Whenmouseusecomputer.[EB/OL].2008-12-26.

 

附录A:

附加图、表

附录B:

主要源程序

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

当前位置:首页 > 求职职场 > 简历

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

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