飞机大战文档_第1页
飞机大战文档_第2页
飞机大战文档_第3页
飞机大战文档_第4页
飞机大战文档_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 毕业实训报告课题名称: Unity 游戏开发 专 业: 移动开发 班 级: Rz 移动 152 学 号: 201560310213 学生姓名: 张博 指导教师: 段菲菲 年 月 日中 原 工 学 院毕 业 实 训 任 务 书 2016年 1 月9日学生姓名张博学号201560210213专 业软件开发班级Rz移动152课题名称Unity3D小游戏开发(星空大战)课题来源指导教师于浦专业软件工程职称讲师 课题说明:开发路线:1,游戏背景(连续播放)2,添加主角3,设置游戏主角的动画4,添加两种子弹并设置子弹的运动5,添加三种子弹设置子弹的自动生成和运动6,添加两种奖励物品设置奖励物品的自动生成

2、和运动7,设置主角的控制7.1检测手指触摸7.2问题:防止主角飞出屏幕8,设置Tag添加子弹和敌人的碰撞9,设计敌人 0 1 2 震动动画和爆炸效果10,添加脚本GameManager做游戏的控制11,统计分数摘 要摘 要 游戏,目前已经是最大众化的娱乐之一,而其中的3D游戏也是技术含量较高的项目之一。Unity3D是一个3D/2D游戏开发工具和游戏引擎套件,其中包括了图形、音频、物理、网络等多方面的引擎支持,并且有一个非常强大的编辑器来整合这一切,非常适合于游戏开发。本文主要是以Unity5.3.8为开发环境,设计并开发一款单机版的三维游戏直升机大战,旨在介绍直升机战斗游戏的实现方法,并逐步

3、介绍使用Unity3D开发3D游戏的方法和技巧。通过这次游戏制作,使我体会到了,制作一个游戏所需要做的工作,包括前期的游戏策划,素材的制作,到后期的游戏的设计,代码实现等,最终形成一个完整的3D游戏,并通过Unity3D选择平台生成可执行文件。但本次设计的直升机战斗游戏所做工作还不够完善,开始场景中菜单比较简单,游戏中武器只有一种,关卡也只有一个,这些都需要以后进一步设计. 第1章 项目分析1.1 Unity 及其组成的介绍本书主要讲解的是,如何使用 Unity 开发 2D 游戏。但在开始讲解之前,最好先熟悉一 下 Unity 这个工具。本章会首先介绍 Unity 的下载和安装,然后会介绍 U

4、nity 界面的各组成 部分,这些知识会在本书后面的章节频繁使用,所以不要掉以轻心。1.2 Unity 概述Unity 现如今已是非常的流行,因此在开始学习 2D 游戏开发之前,本节就来简要说明 下 Unity,及其下载和安装方法。 1.Unity 简介 Unity 是一款跨平台的专业游戏引擎, 可以使用它轻松的开发各种 2D 和 3D 游戏, 然后 部署到各种游戏平台上。 当然也包括这些主流游戏平台: Windows、 iOS、 Android、 Xbox 360、 PS3。 第2 章 2.1 需求分析玩家:控制游戏中的战机,向敌机发出攻击;敌机: 敌机不会发射子弹攻击玩家,boss敌机由程

5、序控制自动向玩家飞机发出攻击子弹: 玩家和boss 敌机都拥有自己的子弹,玩家的子弹可以用来攻击所有的敌机子弹礼包:玩家飞机得到子弹礼包后,玩家的飞机会在一段时间内有发射双排子弹功能炸弹礼包:玩家飞机得到子弹礼包后,玩家飞机如果使用炸弹可以清除屏幕上除boss外的所有敌机。 2.2 功能需求:1用户进入游戏开始菜单可以选择开始游戏,退出游戏,游戏帮助;2进入游戏后可暂停游戏3玩家飞机以一定速度自下而上飞行,用户可以控制飞机前后左右移动4玩家飞机一直发子弹,用户通过控制飞机位置来扫描敌机;5不同种类的敌机以一定速度随机出现;6玩家飞机的发射子弹击中敌机后消失。7玩家飞机达到一定分数后,程序会随机

6、提供子弹包和炸弹包;8玩家与礼包碰撞后即可得到礼包;9弹礼包后,玩家的飞机会在一段时间内有发射双排子弹功能10进行游戏时,屏幕左上角会显示用户达到的分数;2.3 用户功能需求 由于本游戏交互性好,简单易操作,对用户并没有特殊的要求。一般用户经过几分钟后就可以掌握游戏规则。2.4 游戏性能需求 1)实时性: 本应用为手机游戏对于用户操作必须做出立即响应,否则本游戏失败 2)单机手机游戏最大的特点纪委已操作行,用户在不看说明的情况下也能够玩,并且在玩过几遍之后即熟悉本游戏规则。这是本应用对于操作性的要求。2.5 游戏流程:进入游戏开始游戏游戏失败敌机玩家飞机岁游戏进行种类,数量增加查看分数岁游戏进

7、行种类,数量增加得到礼包增加威力重新游戏、退出游戏被击中自行退出退出游戏 如图2.5-1 第3章 场景设计3.1.创建游戏场景 1.由于创建的是2d项目,则将图片拖入Scene中,该图片自动成为一个精灵,所以将图片信息拖入摆放即可。 如图 3-1-1 所示2.下面创建一个GameManager文件,其绑定在摄像机中,主要负责飞机生命,玩家得分,背景播放等的显示功能。而生命,得分的显示需要我们创建GUIText来摆放。public enum GameStateRuning,Pausepublic class GameManager : MonoBehaviour public static Ga

8、meManager _instance;public int score=0;private GUIText guiText;public GameState gameState = GameState.Runing;void Awake()_instance=this;guiText=GameObject.FindGameObjectWithTag("ScoreGUI").GetComponent<GUIText>();/ Update is called once per framevoid Update () guiText.text="Scor

9、e:"+score;public void transfromGameState()if(gameState=GameState.Runing)pauseGame();else if(gameState=GameState.Pause)continueGame(); 3. 然后我们来实现背景的滚动。首先创建两个一样的背景图片上下摆放,如下图所示,这里切换到3d模式,更加形象如图 3-1-34.下面创建用于绑定在背景上的脚本BackgroundTransform,代码如下public class BackgroundTransform : MonoBehaviour public st

10、atic float moveSpeed = 2f;/ Update is called once per framevoid Update () this.transform.Translate( Vector3.down * moveSpeed * Time.deltaTime );Vector3 postion = this.transform.position;if(postion.y<=-8.52f)this.transform.position = new Vector3(postion.x,postion.y+8.52f*2,postion.z ); 然后将脚本绑定在两张背

11、景图上即可。5.主角创建与背景创建基本一样,也是可以用一张2d贴图,就不多说了。主角脚本主要处理移动,发射子弹,处理碰撞等,代码如下:public class Bullet : MonoBehaviour public float speed = 2;/ Update is called once per framevoid Update () transform.Translate( Vector3.up * speed *Time.deltaTime );if(transform.position.y>4.3f)Destroy(this.gameObject);void OnTrig

12、gerEnter2D(Collider2D other) if(other.tag="Enemy")if(!other.GetComponent<Enemy>().isDeath)other.gameObject.SendMessage("BeHit");GameObject.Destroy(this.gameObject); 6.上面代码中我用了bulletTop,bulletLeft,bullfight,这是我为主机添加的两个子对象,主要是用于发射子弹,相当于炮筒吧,而bullet则是定义的预设,其中绑定的脚本后面会说明。3-1-6代码实

13、现如下:public class Gun : MonoBehaviour public float rate =0.2f;public GameObject bullet;public void fire()GameObject.Instantiate(bullet,transform.position,Quaternion.identity );public void openFire()InvokeRepeating("fire",1,rate);public void stopFire()CancelInvoke("fire");好了,通过以上的代

14、码我们就可以按键盘的方向键移动飞机,按空格键发射子弹了,我已经等不及要打敌人了。3.2 创建敌机 1.敌机也是先拖入敌机图片,然后绑定脚本,添加组件,然后保存为预设,我们以后还有个敌机生产器要生产敌机呢。我创建了三种敌机预设 3-2-1 敌机预制2.敌机主要是移动,碰撞。下面来看看敌机脚本:public enum EnemyTypesmallEnemy,middleEnemy,bigEnemypublic class Enemy : MonoBehaviour public int hp = 1;public float speed = 2;public int score = 100;pub

15、lic EnemyType type= EnemyType.smallEnemy;public bool isDeath = false;public Sprite explosionSprites;private float timer=0;public int explosionAnimationFrame=10;private SpriteRenderer render;public float hitTimer = 0.2f;private float resetHitTime ;public Sprite hitSprites;/ Use this for initializatio

16、nvoid Start () render = this.GetComponent<SpriteRenderer>();resetHitTime=hitTimer;hitTimer=0;/ Update is called once per framevoid Update () this.transform.Translate( Vector3.down*speed*Time.deltaTime );if(this.transform.position.y<=-5.6f)Destroy(this.gameObject);if(isDeath)timer+=Time.delt

17、aTime;/ 0int frameIndex = (int)(timer/(1f/explosionAnimationFrame);if(frameIndex>=explosionSprites.Length)/destroyDestroy(this.gameObject);elserender.sprite= explosionSpritesframeIndex;elseif(type=EnemyType.middleEnemy|type=EnemyType.bigEnemy)if(hitTimer>=0)hitTimer-=Time.deltaTime;int frameIn

18、dex = (int)(resetHitTime-hitTimer)/(1f/explosionAnimationFrame);frameIndex%=2;render.sprite= hitSpritesframeIndex; if (Input.GetKeyDown(KeyCode.Space) && BombManager._instance.count>0 ) toDie(); public void BeHit()hp-=1;/ explosionif(hp<=0)toDie();elsehitTimer=resetHitTime;private void

19、 toDie()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-14.下面是敌机生产器,在主界面的左右两边

20、的顶部分别放上两个空物体用来创建敌机。敌机创建时间为13秒不等,然后绑定创建脚本即可。 public class Spawn : MonoBehaviour public GameObject enemy0Prefab;public GameObject enemy1Prefab;public GameObject enemy2Prefab;public GameObject awardType0Prefab;public GameObject awardType1Prefab;public float enemy0Rate = 0.5f;public float enemy1Rate = 5

21、f;public float enemy2Rate = 8f;public float awardType0Rate = 7;public float awardType1Rate = 10;/ Use this for initializationvoid Start () InvokeRepeating("createEnemy0",1,enemy0Rate);InvokeRepeating("createEnemy1",3,enemy1Rate);InvokeRepeating("createEnemy2",6,enemy2Ra

22、te);InvokeRepeating("createAwardType0",10,awardType0Rate);InvokeRepeating("createAwardType1",10,awardType1Rate);/ Update is called once per framevoid Update () public void createEnemy0()float x = Random.Range(-2.15f,2.15f);GameObject.Instantiate(enemy0Prefab,new Vector3(x,transfo

23、rm.position.y,0),Quaternion.identity);public void createEnemy1()float x = Random.Range(-2.04f,2.04f);GameObject.Instantiate(enemy1Prefab,new Vector3(x,transform.position.y,0),Quaternion.identity);public void createEnemy2()float x = Random.Range(-2.04f,2.04f);GameObject.Instantiate(enemy2Prefab,new V

24、ector3(x,transform.position.y,0),Quaternion.identity);public void createAwardType0()GetComponent<AudioSource>().Play();float x = Random.Range(-2.1f,2.1f);GameObject.Instantiate(awardType0Prefab,new Vector3(x,transform.position.y,0),Quaternion.identity);public void createAwardType1()GetComponent<AudioSource>().Play();float x = Random.Range(-2.1f,2.1f);GameObject.Instantiate(awardType

温馨提示

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

评论

0/150

提交评论