当前位置:文档之家› Unity课程设计

Unity课程设计

移动终端游戏开发课程设计说明书题目: Flappy Bird游戏设计院系:专业班级:学号:学生姓名:指导教师:2016年 6 月 30 日安徽理工大学课程设计(论文)任务书学院2016年 4月 1 日安徽理工大学课程设计(论文)成绩评定表目录1 需求分析 (1)2 概要设计 (1)2.1 设计思路 (1)2.2 存储结构设计 (2)2.3 功能模块设计 (3)3 详细设计 (3)3.1 游戏工程视图 (3)3.2 游戏界面布局 (5)3.3 功能模块设计实现 (6)3.3.1游戏开始设计 (6)3.3.2小鸟移动模块设计 (7)3.3.3管道碰撞模块设计 (8)3.3.4场景延续模块设计 (8)3.3.5分数统计模块设计 (8)3.3.6游戏结束模块设计 (9)3.4 其他设计实现 (10)3.4.1 摄像机的跟随 (10)3.4.2 游戏音效的添加 (11)3.4.3 游戏开始界面的设计 (11)4 运行与测试 (12)5 总结 (15)参考文献 (15)1 需求分析1.技术需求:此游戏是在Unity5.3.3上开发出来的,Unity5.3.3可以支持2D、3D场景的编辑,本游戏是基于3D场景开发的。

游戏中的脚本语言使用的是C#,Unity5.3.3中的Monodevelop为脚本编辑提供了平台。

2.功能需求:Flappy Bird是一款益智类的小游戏,其玩法为:游戏开始后,玩家需间歇性的点击鼠标,让小鸟向上飞,不会掉下来,并且要穿过随机出现的管道的间隙,不能碰到管道,碰到就游戏结束,穿过一个管道就可以得到一分。

其制作包括对以下六大功能的需求:(1)当开始游戏后,玩家需要单击指定位置才能开始游戏,否则无法开始;(2)需要通过点击屏幕来控制小鸟的位置,完成使小鸟上下移动的功能;(3)需要对小鸟是否碰到地面或者管道进行判断,从而决定游戏是否结束;(4)需要设置触发器以实现场景的延续,当小鸟碰到触发器,场景中的第一幅背景便挪到最后一幅的后面,从而实现视觉上场景不断出现的效果;(5)需要对玩家进行记分,并对最高分进行判断和存储;(6)在失败后,需要使玩家通过点击按钮重新开始游戏。

2 概要设计2.1 设计思路Flappy Bird 是一款形式简易但难度极高的休闲游戏,我们打算使用unity开发工具来制作这款游戏。

经过分析,我们首先要完成的是对素材的收集,我们可以从网上搜索下载,也可以自己使用PS等工具来画。

其次,我们需要对整个游戏进行模块划分,理清整个游戏是由哪几个模块组成的,经过讨论分析,我们得出这个游戏共需要六大模块。

分析完之后,便进入了正式的游戏制作环节,我们需要对各个模块进行详细设计,其中包括页面布局、碰撞检测、小鸟飞行动画等。

完成各个模块的详细设计后,我们便可以在unity中对它们进行组装和拼接,并运行测试,修改错误和不适当的地方。

自此,整个游戏就设计完成了。

1.Pipe类:管道设计Float pos_y //管道的Y轴值,目的是为了使管道能随机出现2.Bird类:小鸟设计public float timer;//计时器,为了控制显示小鸟飞行动画public int frameNumber;// 一秒的帧数public int frameCount;// 帧计数器3. FollowBird类:摄像机设计private GameObject bird;private Transform birdTransform;//bird的位置4. GameManager类:游戏状态设计public static int GAMESTATE_MENU;//游戏菜单状态public static int GAMESTATE_PLAYING;//游戏中状态public static int GAMESTATE_END; //游戏结束状态public Transform firstBg;//用来记录应该将第一幅场景挪到哪幅场景的后面,以实现场景延续public int score = 0;//记录分数5. MoveTrrigger类:触发器设计Transform currentBg;//用于当前场景的位置Pipe pipe1;//用于新出现的场景中管道1的位置Pipe pipe2;//用于新出现的场景中管道2的位置6. GameMenu类:游戏结束菜单设计public GUIText nowScore;//当前分数public GUIText highScore;//历史最高分public GUITexture startTexture;//开始按钮图片public GUITexture overTexture; //“Game Over”图片7. GameReady类:游戏开始菜单设计public GUITexture readyTexture;//“GetReady”图片public GUITexture TopTexture;//“Tap Tap”图片public static GameReady _intance2;Flappy Bird游戏具有六大功能模块,分别为:(1)游戏开始模块:包括游戏开始菜单的设计;(2)小鸟移动模块:包括对小鸟飞行进行控制的设计;(3)管道碰撞模块:包括管道碰撞和穿过管道即可得分的设计;(4)场景延续模块:包括场景触发器的设计;(5)分数统计模块:包括对玩家分数的统计、显示和在游戏结束时,对玩家的分数进行判断的设计;(6)游戏结束模块:包括游戏结束菜单的设计;其功能模块图如图2-1所示:图2-1 功能模块图3 详细设计3.1 游戏工程视图在新建项目后,我们需要在“Assets”文件夹下导入素材“Audios”:游戏音乐素材文件夹,包括游戏开始音乐、小鸟煽动翅膀的音乐、得分的音乐、撞到管道和地面的音乐、小鸟死亡的音乐;“Textures”:图片素材文件夹,包括:游戏背景、管道、小鸟、游戏菜单等。

“Audios”文件夹如图3-1所示:图3-1 “Audios”文件夹“Textures”文件夹如图3-2所示:图3-2 “Textures”文件夹然后我们需要新建“Materials”:材质文件夹;“Prefabs”:预制文件夹;“Scenes”:游戏场景文件夹;“Scripts”:脚本文件夹。

总体工程视图如图3-3所示:图3-3 总体工程视图3.2 游戏界面布局1.开始界面游戏开始界面如图3-4所示,左上角的“Score”为分数,中间的图画为开始按钮,单击“GetReady”即可开始游戏,右边的管道为小鸟行进途中的障碍,当小鸟碰到障碍,游戏便结束,但当小鸟通过一个障碍即可得一分。

图3-4 开始界面2.结束界面游戏结束界面如图3-5所示,中间的为菜单栏,显示当轮游戏分数和历史最高分,并根据分数来显示所得奖牌的种类,分为金牌、银牌、铜牌,我们可以单击“重新开始”按钮来重新开始游戏。

图3-5 结束界面3.3 功能模块设计实现3.3.1游戏开始设计游戏开始界面与游戏进行界面相似,但一开始没有管道,目的是为了给玩家一个反应的时间。

当程序检测到玩家在游戏界面内点击了鼠标,那么就进入了游戏进行界面。

程序如下:public static int GAMESTATE_MENU =0;public static int GAMESTATE_PLAYING =1;public static int GAMESTATE_END =2;void Update (){if (GameState ==GameManager.GAMESTATE_MENU) {if (Input.GetMouseButtonDown (0)) {GameState = GAMESTATE_PLAYING;bird.SendMessage ("getLife");}}public void getLife(){GetComponent<Rigidbody>().useGravity = true;this.GetComponent<Rigidbody>().velocity = new Vector3(3,0,0);}3.3.2小鸟移动模块设计进入游戏进行界面后,小鸟会显示飞行的动画,在Unity中进行相关参数的设置后,我们需要通过代码来控制小鸟飞行动画,程序如下:if(GameManager._intance.GameState==GameManager.GAMESTATE_PLAYING){ timer += Time.deltaTime;if (timer >= 1.0f / frameNumber) {frameCount++;timer -= 1.0f / frameNumber;int frameIndex = frameCount % 3;this.GetComponent<Renderer>().material.SetTextureOffset ("_MainTex",new Vector2(0.333333f*frameIndex,0));}}我们通过点击鼠标来控制小鸟进行移动,程序如下:if(GameManager._intance.GameState == GameManager.GAMESTATE_PLAYING){ if (Input.GetMouseButton (0)) {//按下左键GetComponent<AudioSource>().Play();Vector3 vel2 = this.GetComponent<Rigidbody> ().velocity;this.GetComponent<Rigidbody>().velocity =new Vector3(vel2.x,4,vel2.z);}}3.3.3管道碰撞模块设计当小鸟碰撞到管道,游戏便结束,此时我们便不能再控制小鸟进行移动,管道碰撞程序如下:void OnCollisionEnter(Collision other){if (other.gameObject.tag == "Player") {hitMusic.Play ();dieMusic.Play ();GameManager._intance.GameState=GameManager.GAMESTATE_EN D;}3.3.4场景延续模块设计当小鸟在飞行过程中,后面的场景应该是不断更新的,我们需要在第三个场景中设置一个触发器,当小鸟碰撞到这个触发器后,我们便把第一个场景挪到最后面,这样我们的场景就能一直不断的更新,程序如下:public void OnTriggerEnter(Collider other){print ("OnTriggerEnter");if(other.tag=="Player"){Transform firstBg = GameManager._intance.firstBg;currentBg.position = new Vector3( firstBg.position.x+10,c urrentBg.position.y,currentBg.position.z);GameManager._intance.firstBg = currentBg;// 管道的新位置pipe1.RandomGeneratePosition();pipe2.RandomGeneratePosition();}}3.3.5分数统计模块设计当小鸟通过管道后,分数便会加1,所以我们需要在管道中间设置一个触发器,并使用代码控制小鸟在碰到触发器后分数能加1,同时显示分数,程序如下:void OnTriggerExit(Collider other){if (other.tag == "Player") {GetComponent<AudioSource>().Play ();GameManager._intance.score++;}}//分数void OnGUI(){bel ("Score:" + GameManager._intance.score);}游戏结束时,将显示本轮分数和历史最高分,代码如下:if (GameState == GameManager.GAMESTATE_END) {GameMenu._intance.gameObject.SetActive (true);GameMenu._intance.UpdateScore (score);}3.3.6游戏结束模块设计当小鸟碰撞到管道或者地面时,游戏便会结束,此时显示游戏结束画面,同时显示本轮分数和历史最高分,并根据分数来显示所得奖牌种类,同时有重新开始按钮,点击即可重新开始游戏,此为无限循环过程。

相关主题