Unity课程设计_第1页
Unity课程设计_第2页
Unity课程设计_第3页
Unity课程设计_第4页
Unity课程设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、移动终端游戏开发课程设计说明书题目: Flappy Bird游戏设计 院 系: 专业班级: 学 号: 学生姓名: 指导教师: 2016年 6 月 30 日安徽理工大学课程设计(论文)任务书 学院 学 号学生姓名专业(班级)设计题目 Flappy Bird游戏设计 设计技术参数系统平台:Windows 7开发工具:Unity、MonoDevelop开发语言:C#设计要求1.能够统计分数,并记录以往最高分2.管道出现具有随机性3.界面合理、友好工作量课程设计报告4945字源程序314行工作计划2016.04.15-04.22 根据课程设计的要求,查找相关资料,完成需求分析;2016.04.23-0

2、5.07 进行系统的概要设计;2016.05.08-06.12 进行系统的详细设计和源代码的书写;2016.06.13-06.30 对系统进行调试分析,撰写课程设计报告。参考资料1严蔚敏,吴伟民. 数据结构. 北京:清华大学出版社,2011 2立波.C#入门经典.北京:清华大学出版社,2006 3金玺曾.Unity3D手机游戏开发.北京:清华大学出版社,2013 4指导教师签字教研室主任签字 2016年 4月 1 日 安徽理工大学课程设计(论文)成绩评定表学生姓名: 学号: 专业班级: 课程设计题目: Flappy Bird游戏设计 评价单元评价要素评价内涵优良中差知识水平30%文献查阅与知识

3、运用能力(20分)能独立查阅文献资料,并能合理地运用到程序设计训练之中;能将所学课程(专业)知识准确地运用到程序设计之中,并归纳总结本程序设计训练所涉及的有关课程知识程序设计方案(10分)程序设计整体思路清晰,程序设计方案合理可行设计表现50%工作量(10分)课程设计工作量饱满设计态度(10分)设计态度认真,遵守程序设计阶段的纪律,作风严谨,能按时完成设计任务书中规定的任务,按时上交课程设计有关资料实际动手能力(20分)实际动力能力强,能独立完成相关设计任务创新能力(10分)有一定的创新能力说明书质量20%写作水平(10分)整体思路清晰,结构合理,层次分明,语言表达流畅,综合概括能力强写作规范

4、(10分)符合课程设计说明书的基本要求,用语、格式、图表、数据及各种资料引用规范(符合标准)成绩: 指导教师: 年 月 日目录1 需求分析12 概要设计12.1 设计思路12.2 存储结构设计22.3 功能模块设计33 详细设计33.1 游戏工程视图33.2 游戏界面布局53.3 功能模块设计实现63.3.1游戏开始设计63.3.2小鸟移动模块设计73.3.3管道碰撞模块设计83.3.4场景延续模块设计83.3.5分数统计模块设计83.3.6游戏结束模块设计93.4 其他设计实现103.4.1 摄像机的跟随103.4.2 游戏音效的添加113.4.3 游戏开始界面的设计114 运行与测试125

5、 总结15参考文献15 1 需求分析1.技术需求: 此游戏是在Unity5.3.3上开发出来的,Unity5.3.3可以支持2D、3D场景的编辑,本游戏是基于3D场景开发的。游戏中的脚本语言使用的是C#,Unity5.3.3中的Monodevelop为脚本编辑提供了平台。2.功能需求: Flappy Bird是一款益智类的小游戏,其玩法为:游戏开始后,玩家需间歇性的点击鼠标,让小鸟向上飞,不会掉下来,并且要穿过随机出现的管道的间隙,不能碰到管道,碰到就游戏结束,穿过一个管道就可以得到一分。其制作包括对以下六大功能的需求:(1)当开始游戏后,玩家需要单击指定位置才能开始游戏,否则无法开始;(2)

6、需要通过点击屏幕来控制小鸟的位置,完成使小鸟上下移动的功能;(3)需要对小鸟是否碰到地面或者管道进行判断,从而决定游戏是否结束;(4)需要设置触发器以实现场景的延续,当小鸟碰到触发器,场景中的第一幅背景便挪到最后一幅的后面,从而实现视觉上场景不断出现的效果;(5)需要对玩家进行记分,并对最高分进行判断和存储;(6)在失败后,需要使玩家通过点击按钮重新开始游戏。 2 概要设计2.1 设计思路Flappy Bird 是一款形式简易但难度极高的休闲游戏,我们打算使用unity开发工具来制作这款游戏。经过分析,我们首先要完成的是对素材的收集,我们可以从网上搜索下载,也可以自己使用P

7、S等工具来画。其次,我们需要对整个游戏进行模块划分,理清整个游戏是由哪几个模块组成的,经过讨论分析,我们得出这个游戏共需要六大模块。分析完之后,便进入了正式的游戏制作环节,我们需要对各个模块进行详细设计,其中包括页面布局、碰撞检测、小鸟飞行动画等。完成各个模块的详细设计后,我们便可以在unity中对它们进行组装和拼接,并运行测试,修改错误和不适当的地方。自此,整个游戏就设计完成了。2.2 存储结构设计 1Pipe类:管道设计 Float pos_y /管道的Y轴值,目的是为了使管道能随机出现 2Bird类:小鸟设计 public float timer;/计时器,为了控制显

8、示小鸟飞行动画   public int frameNumber;/ 一秒的帧数   public int frameCount;/  帧计数器 3. FollowBird类:摄像机设计 private GameObject bird; private Transform birdTransform;/bird的位置 4. GameManager类:游戏状态设计 public static int GAMESTATE_MENU;/游戏菜单状态   

9、;public static int GAMESTATE_PLAYING;/游戏中状态   public static int GAMESTATE_END; /游戏结束状态 public Transform firstBg;/用来记录应该将第一幅场景挪到哪幅场景 的后面,以实现场景延续   public int score = 0;/记录分数 5. MoveTrrigger类:触发器设计 Transform currentBg;/用于当

10、前场景的位置 Pipe pipe1;/用于新出现的场景中管道1的位置Pipe pipe2;/用于新出现的场景中管道2的位置 6. GameMenu类:游戏结束菜单设计public GUIText nowScore;/当前分数  public GUIText highScore;/历史最高分  public GUITexture startTexture;/开始按钮图片  public GUITexture overTexture; /“Game Over”

11、图片 7. GameReady类:游戏开始菜单设计public GUITexture readyTexture;/“GetReady”图片   public GUITexture TopTexture;/“Tap Tap”图片   public static GameReady  _intance2; 2.3 功能模块设计Flappy Bird游戏具有六大功能模块,分别为:(1) 游戏开始模块:包括游戏开始菜单的设计;(2) 小鸟移动模块:包括对小鸟飞行进行控制的设计;(3)

12、 管道碰撞模块:包括管道碰撞和穿过管道即可得分的设计;(4) 场景延续模块:包括场景触发器的设计;(5) 分数统计模块:包括对玩家分数的统计、显示和在游戏结束时,对玩家的分数进行判断的设计;(6) 游戏结束模块:包括游戏结束菜单的设计;其功能模块图如图2-1所示:Flappy Bird小鸟移动模块管道碰撞模块场景延续模块分数统计模块游戏结束模块游戏开始模块 图2-1 功能模块图3 详细设计3.1 游戏工程视图在新建项目后,我们需要在“Assets”文件夹下导入素材“Audios”:游戏音乐素材文件夹,包括游戏开始音乐、小鸟煽动翅膀的音乐、得分的音乐、撞到管道和地面的音乐、小鸟死亡的音乐;“Te

13、xtures”:图片素材文件夹,包括:游戏背景、管道、小鸟、游戏菜单等。“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”即可开始游戏,右边的管道为小鸟行进途

14、中的障碍,当小鸟碰到障碍,游戏便结束,但当小鸟通过一个障碍即可得一分。 图3-4 开始界面2.结束界面 游戏结束界面如图3-5所示,中间的为菜单栏,显示当轮游戏分数和历史最高分,并根据分数来显示所得奖牌的种类,分为金牌、银牌、铜牌,我们可以单击“重新开始”按钮来重新开始游戏。 图3-5 结束界面3.3 功能模块设计实现3.3.1游戏开始设计游戏开始界面与游戏进行界面相似,但一开始没有管道,目的是为了给玩家一个反应的时间。当程序检测到玩家在游戏界面内点击了鼠标,那么就进入了游戏进行界面。程序如下: public static int GAMESTATE_MENU =0; public stati

15、c 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.

16、GetComponent<Rigidbody>().velocity = new Vector3(3,0,0);3.3.2小鸟移动模块设计 进入游戏进行界面后,小鸟会显示飞行的动画,在Unity中进行相关参数的设置后,我们需要通过代码来控制小鸟飞行动画,程序如下:if(GameManager._intance.GameState=GameManager.GAMESTATE_PLAYING)   timer += Time.deltaTime;   if (timer >=

17、60;1.0f / frameNumber)       frameCount+;      timer -= 1.0f / frameNumber;      int frameIndex = frameCount % 3;      t

18、his.GetComponent<Renderer>().material.SetTextureOffset  ("_MainTex",new Vector2(0.333333f*frameIndex,0);   我们通过点击鼠标来控制小鸟进行移动,程序如下:if(GameManager._intance.GameState = GameManager.GAMESTATE_PLAYING)   if (Input.GetMouseButton (0)&#

19、160; /按下左键                 GetComponent<AudioSource>().Play();    Vector3 vel2 = this.GetComponent<Rigidbody> ().velocity;    this.GetComponent<Rigidbody&g

20、t;().velocity = new Vector3(vel2.x,4,vel2.z);           3.3.3管道碰撞模块设计 当小鸟碰撞到管道,游戏便结束,此时我们便不能再控制小鸟进行移动,管道碰撞程序如下:void OnCollisionEnter(Collision other) if (other.gameObject.tag = "Player")    

21、   hitMusic.Play ();      dieMusic.Play ();      GameManager._intance.GameState=GameManager.GAMESTATE_END;  3.3.4场景延续模块设计 当小鸟在飞行过程中,后面的场景应该是不断更新的,我们需要在第三个场景中设置一个触发器,当小鸟碰撞到这个触发器后,我们便把第一个场景挪到最后面,这样我们的场景就能一直不断的更新,程序如下:public

22、0;void OnTriggerEnter(Collider other) print ("OnTriggerEnter");    if(other.tag="Player")     Transform firstBg = GameManager._intance.firstBg;    currentBg.position = new Vector3( firstBg.p

23、osition.x+10,currentBg.position.y,currentBg.position.z);    GameManager._intance.firstBg = currentBg;    / 管道的新位置    pipe1.RandomGeneratePosition();    pipe2.RandomGeneratePosition();       3.3.5

24、分数统计模块设计 当小鸟通过管道后,分数便会加1,所以我们需要在管道中间设置一个触发器,并使用代码控制小鸟在碰到触发器后分数能加1,同时显示分数,程序如下:void OnTriggerExit(Collider other) if (other.tag = "Player")     GetComponent<AudioSource>().Play ();      GameManager._intance.sco

25、re+;           /分数void OnGUI() GUILayout.Label ("Score:" + GameManager._intance.score);  游戏结束时,将显示本轮分数和历史最高分,代码如下:if (GameState = GameManager.GAMESTATE_END)  GameMenu._intance.gameObject.Set

26、Active (true); GameMenu._intance.UpdateScore (score); 3.3.6游戏结束模块设计当小鸟碰撞到管道或者地面时,游戏便会结束,此时显示游戏结束画面,同时显示本轮分数和历史最高分,并根据分数来显示所得奖牌种类,同时有重新开始按钮,点击即可重新开始游戏,此为无限循环过程。代码如下:void Awake() _intance = this;    this.gameObject.SetActive(false);public void UpdateSc

27、ore(float nowScore) float highScore = PlayerPrefs.GetFloat ("score",0);    if (nowScore > highScore)          highScore = nowScore;       

28、0; int a;    a= int.Parse (nowScore.ToString ();    if (a > 0 && a < 10|a=0)       ModelMenu._intance3.gameObject.SetActive (true);      

29、0;  if (a > 10 && a< 30 | a =10)       ModelMenu2._intance4.gameObject.SetActive (true);        if (a > 30 | a =30)    

30、;   ModelMenu3._intance5.gameObject.SetActive (true);      PlayerPrefs.SetFloat ("score", highScore); this.nowScore.text = nowScore+""   this.highScore.text =highScore +""   if

31、0;(Input.GetMouseButtonDown(0)&&GameManager._intance.GameState = GameManager.GAMESTATE_END)  /重新开始游戏   Rect rect = startTexture.GetScreenRect ();   Vector3 mousePos = Input.mousePosition;   if 

32、;(mousePos.x > rect.x && mousePos.x < (rect.x + rect.width) &&      mousePos.y > rect.y &&      mousePos.y < (rect.y + rect.height) &#

33、160;       Application.LoadLevel (0);  3.4 其他设计实现3.4.1 摄像机的跟随 在游戏过程中,如果没有处理好摄像机的跟随,游戏就会一直显示一个界面,这显然是与游戏要求不符的,所以我们需要将摄像机赋到小鸟的身上,并使用代码来控制摄像机,程序如下: private GameObject bird;private Transform birdTransform;void Start ()  

34、0; bird  = GameObject.FindGameObjectWithTag("Player");     birdTransform = bird.transform;    void Update ()    Vector3 birdPos = birdTransform.position;    

35、60;float y = birdPos.y - 3.98f;     if (y > 2.3f)         y = 2.3f;          if (y < -2.1f)    

36、;     y = -2.1f;          this.transform.position = new Vector3(birdPos.x+4.34f,y,birdPos.z-5.1f);  3.4.2 游戏音效的添加 一个游戏如果没有音乐效果那肯定是平淡无味的,添加了游戏音效后,会让整个游戏更加生动形象,在这个游戏中,我们在导入了音乐素材之后,再给需要添加音乐效果的地方添加“Audio

37、Source”组件,并把对应的音乐添加进去即可,以撞到管道为例播放音乐的代码如下:public  AudioSource hitMusic; void update()   hitMusic.Play ();3.4.3 游戏开始界面的设计 进入游戏后,我们需要单击“GetReady”来开始游戏,程序如下:void Awake () _intance2 = this;   void Update () if (GameState 

38、;=GameManager.GAMESTATE_MENU)  if (Input.GetMouseButtonDown (0)&&         mousePos.x > rect.x &&         mousePos.x < (rect.x + rect.width) &am

39、p;&         mousePos.y > rect.y &&         mousePos.y < (rect.y + rect.height)            GameState = GAMESTATE_PLAYING;           bird.SendMessage ("getLife"

温馨提示

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

评论

0/150

提交评论