Unity課程設計_第1頁
Unity課程設計_第2頁
Unity課程設計_第3頁
Unity課程設計_第4頁
Unity課程設計_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、移動終端游戲開發(fā)課程設計說明書題目: Flappy Bird游戲設計 院 系: 專業(yè)班級: 學 號: 學生姓名: 指導教師: 2016年 6 月 30 日安徽理工大學課程設計(論文)任務書 學院 學 號學生姓名專業(yè)(班級)設計題目 Flappy Bird游戲設計 設計技術參數(shù)系統(tǒng)平臺:Windows 7開發(fā)工具:Unity、MonoDevelop開發(fā)語言:C#設計要求1.能夠統(tǒng)計分數(shù),并記錄以往最高分2.管道出現(xiàn)具有隨機性3.界面合理、友好工作量課程設計報告4945字源程序314行工作計劃2016.04.15-04.22 根據(jù)課程設計的要求,查找相關資料,完成需求分析;2016.04.23-0

2、5.07 進行系統(tǒng)的概要設計;2016.05.08-06.12 進行系統(tǒng)的詳細設計和源代碼的書寫;2016.06.13-06.30 對系統(tǒng)進行調(diào)試分析,撰寫課程設計報告。參考資料1嚴蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu). 北京:清華大學出版社,2011 2立波.C#入門經(jīng)典.北京:清華大學出版社,2006 3金璽曾.Unity3D手機游戲開發(fā).北京:清華大學出版社,2013 4指導教師簽字教研室主任簽字 2016年 4月 1 日 安徽理工大學課程設計(論文)成績評定表學生姓名: 學號: 專業(yè)班級: 課程設計題目: Flappy Bird游戲設計 評價單元評價要素評價內(nèi)涵優(yōu)良中差知識水平30%文獻查閱與知識

3、運用能力(20分)能獨立查閱文獻資料,并能合理地運用到程序設計訓練之中;能將所學課程(專業(yè))知識準確地運用到程序設計之中,并歸納總結(jié)本程序設計訓練所涉及的有關課程知識程序設計方案(10分)程序設計整體思路清晰,程序設計方案合理可行設計表現(xiàn)50%工作量(10分)課程設計工作量飽滿設計態(tài)度(10分)設計態(tài)度認真,遵守程序設計階段的紀律,作風嚴謹,能按時完成設計任務書中規(guī)定的任務,按時上交課程設計有關資料實際動手能力(20分)實際動力能力強,能獨立完成相關設計任務創(chuàng)新能力(10分)有一定的創(chuàng)新能力說明書質(zhì)量20%寫作水平(10分)整體思路清晰,結(jié)構(gòu)合理,層次分明,語言表達流暢,綜合概括能力強寫作規(guī)范

4、(10分)符合課程設計說明書的基本要求,用語、格式、圖表、數(shù)據(jù)及各種資料引用規(guī)范(符合標準)成績: 指導教師: 年 月 日目錄1 需求分析12 概要設計12.1 設計思路12.2 存儲結(jié)構(gòu)設計22.3 功能模塊設計33 詳細設計33.1 游戲工程視圖33.2 游戲界面布局53.3 功能模塊設計實現(xiàn)63.3.1游戲開始設計63.3.2小鳥移動模塊設計73.3.3管道碰撞模塊設計83.3.4場景延續(xù)模塊設計83.3.5分數(shù)統(tǒng)計模塊設計83.3.6游戲結(jié)束模塊設計93.4 其他設計實現(xiàn)103.4.1 攝像機的跟隨103.4.2 游戲音效的添加113.4.3 游戲開始界面的設計114 運行與測試125

5、 總結(jié)15參考文獻15 1 需求分析1.技術需求: 此游戲是在Unity5.3.3上開發(fā)出來的,Unity5.3.3可以支持2D、3D場景的編輯,本游戲是基于3D場景開發(fā)的。游戲中的腳本語言使用的是C#,Unity5.3.3中的Monodevelop為腳本編輯提供了平臺。2.功能需求: Flappy Bird是一款益智類的小游戲,其玩法為:游戲開始后,玩家需間歇性的點擊鼠標,讓小鳥向上飛,不會掉下來,并且要穿過隨機出現(xiàn)的管道的間隙,不能碰到管道,碰到就游戲結(jié)束,穿過一個管道就可以得到一分。其制作包括對以下六大功能的需求:(1)當開始游戲后,玩家需要單擊指定位置才能開始游戲,否則無法開始;(2)

6、需要通過點擊屏幕來控制小鳥的位置,完成使小鳥上下移動的功能;(3)需要對小鳥是否碰到地面或者管道進行判斷,從而決定游戲是否結(jié)束;(4)需要設置觸發(fā)器以實現(xiàn)場景的延續(xù),當小鳥碰到觸發(fā)器,場景中的第一幅背景便挪到最后一幅的后面,從而實現(xiàn)視覺上場景不斷出現(xiàn)的效果;(5)需要對玩家進行記分,并對最高分進行判斷和存儲;(6)在失敗后,需要使玩家通過點擊按鈕重新開始游戲。 2 概要設計2.1 設計思路Flappy Bird 是一款形式簡易但難度極高的休閑游戲,我們打算使用unity開發(fā)工具來制作這款游戲。經(jīng)過分析,我們首先要完成的是對素材的收集,我們可以從網(wǎng)上搜索下載,也可以自己使用P

7、S等工具來畫。其次,我們需要對整個游戲進行模塊劃分,理清整個游戲是由哪幾個模塊組成的,經(jīng)過討論分析,我們得出這個游戲共需要六大模塊。分析完之后,便進入了正式的游戲制作環(huán)節(jié),我們需要對各個模塊進行詳細設計,其中包括頁面布局、碰撞檢測、小鳥飛行動畫等。完成各個模塊的詳細設計后,我們便可以在unity中對它們進行組裝和拼接,并運行測試,修改錯誤和不適當?shù)牡胤?。自此,整個游戲就設計完成了。2.2 存儲結(jié)構(gòu)設計 1Pipe類:管道設計 Float pos_y /管道的Y軸值,目的是為了使管道能隨機出現(xiàn) 2Bird類:小鳥設計 public float timer;/計時器,為了控制顯

8、示小鳥飛行動畫   public int frameNumber;/ 一秒的幀數(shù)   public int frameCount;/  幀計數(shù)器 3. FollowBird類:攝像機設計 private GameObject bird; private Transform birdTransform;/bird的位置 4. GameManager類:游戲狀態(tài)設計 public static int GAMESTATE_MENU;/游戲菜單狀態(tài)   

9、;public static int GAMESTATE_PLAYING;/游戲中狀態(tài)   public static int GAMESTATE_END; /游戲結(jié)束狀態(tài) public Transform firstBg;/用來記錄應該將第一幅場景挪到哪幅場景 的后面,以實現(xiàn)場景延續(xù)   public int score = 0;/記錄分數(shù) 5. MoveTrrigger類:觸發(fā)器設計 Transform currentBg;/用于當

10、前場景的位置 Pipe pipe1;/用于新出現(xiàn)的場景中管道1的位置Pipe pipe2;/用于新出現(xiàn)的場景中管道2的位置 6. GameMenu類:游戲結(jié)束菜單設計public GUIText nowScore;/當前分數(shù)  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) 場景延續(xù)模塊:包括場景觸發(fā)器的設計;(5) 分數(shù)統(tǒng)計模塊:包括對玩家分數(shù)的統(tǒng)計、顯示和在游戲結(jié)束時,對玩家的分數(shù)進行判斷的設計;(6) 游戲結(jié)束模塊:包括游戲結(jié)束菜單的設計;其功能模塊圖如圖2-1所示:Flappy Bird小鳥移動模塊管道碰撞模塊場景延續(xù)模塊分數(shù)統(tǒng)計模塊游戲結(jié)束模塊游戲開始模塊 圖2-1 功能模塊圖3 詳細設計3.1 游戲工程視圖在新建項目后,我們需要在“Assets”文件夾下導入素材“Audios”:游戲音樂素材文件夾,包括游戲開始音樂、小鳥煽動翅膀的音樂、得分的音樂、撞到管道和地面的音樂、小鳥死亡的音樂;“Te

13、xtures”:圖片素材文件夾,包括:游戲背景、管道、小鳥、游戲菜單等?!癆udios”文件夾如圖3-1所示: 圖3-1 “Audios”文件夾“Textures”文件夾如圖3-2所示: 圖3-2 “Textures”文件夾然后我們需要新建“Materials”:材質(zhì)文件夾;“Prefabs”:預制文件夾;“Scenes”:游戲場景文件夾;“Scripts”:腳本文件夾??傮w工程視圖如圖3-3所示: 圖3-3 總體工程視圖3.2 游戲界面布局1.開始界面 游戲開始界面如圖3-4所示,左上角的“Score”為分數(shù),中間的圖畫為開始按鈕,單擊“GetReady”即可開始游戲,右邊的管道為小鳥行進途

14、中的障礙,當小鳥碰到障礙,游戲便結(jié)束,但當小鳥通過一個障礙即可得一分。 圖3-4 開始界面2.結(jié)束界面 游戲結(jié)束界面如圖3-5所示,中間的為菜單欄,顯示當輪游戲分數(shù)和歷史最高分,并根據(jù)分數(shù)來顯示所得獎牌的種類,分為金牌、銀牌、銅牌,我們可以單擊“重新開始”按鈕來重新開始游戲。 圖3-5 結(jié)束界面3.3 功能模塊設計實現(xiàn)3.3.1游戲開始設計游戲開始界面與游戲進行界面相似,但一開始沒有管道,目的是為了給玩家一個反應的時間。當程序檢測到玩家在游戲界面內(nèi)點擊了鼠標,那么就進入了游戲進行界面。程序如下: 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中進行相關參數(shù)的設置后,我們需要通過代碼來控制小鳥飛行動畫,程序如下: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管道碰撞模塊設計 當小鳥碰撞到管道,游戲便結(jié)束,此時我們便不能再控制小鳥進行移動,管道碰撞程序如下:void OnCollisionEnter(Collision other) if (other.gameObject.tag = "Player")    

21、   hitMusic.Play ();      dieMusic.Play ();      GameManager._intance.GameState=GameManager.GAMESTATE_END;  3.3.4場景延續(xù)模塊設計 當小鳥在飛行過程中,后面的場景應該是不斷更新的,我們需要在第三個場景中設置一個觸發(fā)器,當小鳥碰撞到這個觸發(fā)器后,我們便把第一個場景挪到最后面,這樣我們的場景就能一直不斷的更新,程序如下: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、分數(shù)統(tǒng)計模塊設計 當小鳥通過管道后,分數(shù)便會加1,所以我們需要在管道中間設置一個觸發(fā)器,并使用代碼控制小鳥在碰到觸發(fā)器后分數(shù)能加1,同時顯示分數(shù),程序如下:void OnTriggerExit(Collider other) if (other.tag = "Player")     GetComponent<AudioSource>().Play ();      GameManager._intance.sco

25、re+;           /分數(shù)void OnGUI() GUILayout.Label ("Score:" + GameManager._intance.score);  游戲結(jié)束時,將顯示本輪分數(shù)和歷史最高分,代碼如下:if (GameState = GameManager.GAMESTATE_END)  GameMenu._intance.gameObject.Set

26、Active (true); GameMenu._intance.UpdateScore (score); 3.3.6游戲結(jié)束模塊設計當小鳥碰撞到管道或者地面時,游戲便會結(jié)束,此時顯示游戲結(jié)束畫面,同時顯示本輪分數(shù)和歷史最高分,并根據(jù)分數(shù)來顯示所得獎牌種類,同時有重新開始按鈕,點擊即可重新開始游戲,此為無限循環(huán)過程。代碼如下: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 其他設計實現(xiàn)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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論