unity課程設(shè)計(jì)--小球吃寶石_第1頁
已閱讀1頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  課程: Unity3D課程設(shè)計(jì) </p><p>  題目: 小球吃寶石 </p><p><b>  摘要</b></p><p>  網(wǎng)絡(luò)游戲是一種新型的 IT產(chǎn)業(yè)。我們研究主要內(nèi)容是網(wǎng)絡(luò)軟件設(shè)計(jì)方法,網(wǎng)絡(luò)游戲:英文名稱為Online Game,又稱 “在線游戲”,簡稱“網(wǎng)游”。指以互聯(lián)

2、網(wǎng)為傳輸媒介,以游戲運(yùn)營商服務(wù)器和用戶計(jì)算機(jī)為處理終端,以游戲客戶端軟件為信息交互窗口的旨在實(shí)現(xiàn)娛樂、休閑、交流和取得虛擬成就的具有可持續(xù)性的個(gè)體性多人在線游戲。</p><p>  本報(bào)告主要講述了這個(gè)小游戲的設(shè)計(jì)思路及初步使用Unity3D軟件的感受和總結(jié)。設(shè)計(jì)過程中,首先建立自己想要的模型,然后在此基礎(chǔ)上進(jìn)行需求迭代,詳細(xì)設(shè)計(jì)時(shí)不斷地修正和完善,經(jīng)過測試階段反復(fù)調(diào)試和驗(yàn)證,最終形成達(dá)到設(shè)計(jì)要求的小游戲。&l

3、t;/p><p>  基于視頻教程“平衡球”的基礎(chǔ),構(gòu)建了一個(gè)益智游戲風(fēng)格的游戲,并有主角(小球)與關(guān)卡(一關(guān))、游戲邏輯(觸碰寶石)、游戲環(huán)境界面(環(huán)形軌道)等設(shè)計(jì),使得玩家可以在場景軌道中進(jìn)行小球吃寶石的冒險(xiǎn)游戲。</p><p>  本游戲的控制很簡單,及用鍵盤的上下左右(或WSAD)四個(gè)箭頭控制小球的上下左右四個(gè)方向,用戶根據(jù)自己的戰(zhàn)略方式選擇小球能吃到寶石的最佳捷徑,從而一步步吃掉所

4、有寶石。</p><p>  分工:劉卉——場景的構(gòu)建和小球、寶石等道具的設(shè)計(jì);沈玉婷——游戲內(nèi)容的構(gòu)思設(shè)計(jì)和程序代碼的編寫。</p><p>  關(guān)鍵詞:網(wǎng)絡(luò)游戲、小球吃寶石、瀏覽器形式。</p><p><b>  概述</b></p><p>  《網(wǎng)絡(luò)游戲程序設(shè)計(jì)》這一課程以大作業(yè)形式進(jìn)行考核,能更好地鍛煉學(xué)生綜

5、合運(yùn)用本課程所授知識(shí)的能力。大作業(yè)主要內(nèi)容為設(shè)計(jì)完成面向某一主題內(nèi)容的游戲演示程序。</p><p>  自選游戲主題,并根據(jù)所選定的主題內(nèi)容設(shè)計(jì)一個(gè)典型的游戲場景及玩家邏輯,其中包含主角與關(guān)卡,游戲邏輯,游戲環(huán)境界面與交互過程等的設(shè)計(jì);開發(fā)完成與設(shè)計(jì)相符的游戲Demo。</p><p>  要求使用Unity3D游戲開發(fā)軟件實(shí)現(xiàn)上述游戲Demo。</p><p>

6、<b>  具體要求</b></p><p>  每人單獨(dú)完成,特殊可由2人合作完成。</p><p><b>  游戲主題自擬。</b></p><p>  根據(jù)所設(shè)游戲主題、場景及玩家邏輯,實(shí)現(xiàn)完成相應(yīng)的游戲Demo,并撰寫設(shè)計(jì)開發(fā)報(bào)告。</p><p><b>  網(wǎng)絡(luò)游戲介紹<

7、;/b></p><p>  網(wǎng)絡(luò)游戲是一種新型的 IT產(chǎn)業(yè)。我們研究主要內(nèi)容是網(wǎng)絡(luò)軟件設(shè)計(jì)方法,網(wǎng)絡(luò)游戲:英文名稱為Online Game,又稱 “在線游戲”,簡稱“網(wǎng)游”。指以互聯(lián)網(wǎng)為傳輸媒介,以游戲運(yùn)營商服務(wù)器和用戶計(jì)算機(jī)為處理終端,以游戲客戶端軟件為信息交互窗口的旨在實(shí)現(xiàn)娛樂、休閑、交流和取得虛擬成就的具有可持續(xù)性的個(gè)體性多人在線游戲。網(wǎng)絡(luò)游戲目前的使用形式可以分為以下二種:</p>

8、<p><b>  (1)瀏覽器形式</b></p><p>  基于瀏覽器的游戲,也就是我們通常說到的網(wǎng)頁游戲,又稱為WEB GAME,它不用下載客戶端,任何地方任何時(shí)間任何一臺(tái)能上網(wǎng)的電腦快樂的游戲,尤其適合上班族,其類型及題材也非常豐富。</p><p><b>  (2)客戶端形式</b></p><p>

9、;  這一種類型是由公司所架設(shè)的服務(wù)器來提供游戲,而玩家們則是由公司所提供的客戶端來連上公司服務(wù)器以進(jìn)行游戲,而現(xiàn)在稱之為網(wǎng)絡(luò)游戲的大都屬于此類型。此類游戲的特征是大多數(shù)玩家都會(huì)有一個(gè)專屬于自己的角色(虛擬身份),而一切角色資料以及游戲資訊均記錄在服務(wù)端。</p><p>  就目前網(wǎng)絡(luò)游戲主要的游戲模式而言,主要有以下幾種:動(dòng)作游戲、冒險(xiǎn)游戲、益智游戲、卡片游戲、戰(zhàn)略游戲等等。本課程設(shè)計(jì)所設(shè)計(jì)的游戲類型是小球吃

10、寶石游戲,屬于益智游戲的一種。</p><p><b>  設(shè)計(jì)主題 </b></p><p>  基于視頻教程“平衡球”的基礎(chǔ),構(gòu)建了一個(gè)益智游戲風(fēng)格的游戲,并有主角(小球)與關(guān)卡(一關(guān))、游戲邏輯(觸碰寶石)、游戲環(huán)境界面(環(huán)形軌道)等設(shè)計(jì),使得玩家可以在場景軌道中進(jìn)行小球吃寶石的冒險(xiǎn)游戲。</p><p><b>  設(shè)計(jì)思路&

11、lt;/b></p><p>  本游戲以幾個(gè)環(huán)環(huán)相扣的軌道作為小球運(yùn)動(dòng)的軌跡,在軌道上分別設(shè)計(jì)一些紅寶石,通過電腦上的上下左右箭頭(或WSAD)分別控制小球的運(yùn)動(dòng)方向(上下左右),稍有偏差小球就會(huì)離開平面,游戲結(jié)束;相反,如果小球運(yùn)動(dòng)位置沒有偏離所設(shè)計(jì)軌道平面而且碰觸到紅寶石,即算初步成功,當(dāng)小球全部吃掉所設(shè)計(jì)的紅寶石,游戲勝利。</p><p>  本報(bào)告主要講述了這個(gè)小游戲的設(shè)

12、計(jì)思路及初步使用Unity3D軟件的感受和總結(jié)。設(shè)計(jì)過程中,首先建立自己想要的模型,然后在此基礎(chǔ)上進(jìn)行需求迭代,詳細(xì)設(shè)計(jì)時(shí)不斷地修正和完善,經(jīng)過測試階段反復(fù)調(diào)試和驗(yàn)證,最終形成達(dá)到設(shè)計(jì)要求的小游戲。</p><p>  分工:劉卉——場景的構(gòu)建和小球、寶石等道具的設(shè)計(jì);沈玉婷——游戲內(nèi)容的構(gòu)思設(shè)計(jì)和程序代碼的編寫。</p><p><b>  具體構(gòu)建步驟 </b>&

13、lt;/p><p><b>  天空盒子添加</b></p><p>  用BSP筆刷建造場景的基本結(jié)構(gòu)。 </p><p>  為場景貼圖。貼圖時(shí),根據(jù)道具的風(fēng)格,選擇泥土或磚塊的BSP貼圖,每次貼圖選擇一個(gè)平面的一個(gè)面,復(fù)制粘貼直至完全貼完。 </p><p>  放置靜態(tài)模型和道具。本場景設(shè)定為環(huán)形軌道上小球的運(yùn)動(dòng),選

14、用小球和寶石做道具。</p><p>  場景燈光。添加相應(yīng)的點(diǎn)光源,查看效果。 </p><p>  攝像機(jī)。調(diào)整攝像機(jī)到合適的位置</p><p><b>  程序腳本 </b></p><p>  1、 游戲結(jié)束觸發(fā)器程序(GameoverTrigger):</p><p>  using

15、UnityEngine;</p><p>  using System.Collections;</p><p>  public class GameoverTrigger : MonoBehaviour {</p><p>  void OnTriggerEnter()</p><p><b>  {</b><

16、/p><p>  MarbleGameManager.SP.SetGameOver();</p><p><b>  }</b></p><p><b>  }</b></p><p>  2、 小球的控制程序(MarbleControl):</p><p>  using Un

17、ityEngine;</p><p>  using System.Collections;</p><p>  public class MarbleControl : MonoBehaviour {</p><p>  public float movementSpeed = 6.0f;</p><p>  void Update ()

18、{</p><p>  Vector3 movement = (Input.GetAxis("Horizontal") * -Vector3.left * movementSpeed) + (Input.GetAxis("Vertical") * Vector3.forward *movementSpeed);</p><p>  rigidbody

19、.AddForce(movement, ForceMode.Force);</p><p><b>  }</b></p><p>  void OnTriggerEnter (Collider other ) {</p><p>  if (other.tag == "Pickup")</p><p

20、><b>  {</b></p><p>  MarbleGameManager.SP.FoundGem();</p><p>  Destroy(other.gameObject);</p><p><b>  }</b></p><p><b>  else</b>&

21、lt;/p><p><b>  {</b></p><p>  //Other collider.. See other.tag and other.name</p><p><b>  } </b></p><p><b>  }</b></p>&l

22、t;p><b>  }</b></p><p>  3、 小球游戲運(yùn)作情形設(shè)計(jì)程序(MarbleGameManager):</p><p>  using UnityEngine;</p><p>  using System.Collections;</p><p>  public enum MarbleGam

23、eState {playing, won,lost };</p><p>  public class MarbleGameManager : MonoBehaviour</p><p><b>  {</b></p><p>  public static MarbleGameManager SP;</p><p> 

24、 private int totalGems;</p><p>  private int foundGems;</p><p>  private MarbleGameState gameState;</p><p>  void Awake()</p><p><b>  {</b></p><p

25、>  SP = this; </p><p>  foundGems = 0;</p><p>  gameState = MarbleGameState.playing;</p><p>  totalGems = GameObject.FindGameObjectsWithTag("Pickup").Length;</p>

26、<p>  Time.timeScale = 1.0f;</p><p><b>  }</b></p><p>  void OnGUI () {</p><p>  GUILayout.Label(" Found gems: "+foundGems+"/"+totalGems );<

27、/p><p>  if (gameState == MarbleGameState.lost)</p><p><b>  {</b></p><p>  GUILayout.Label("You Lost!");</p><p>  if(GUILayout.Button("Try again

28、") ){</p><p>  Application.LoadLevel(Application.loadedLevel);</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if (gameState == MarbleGam

29、eState.won)</p><p><b>  {</b></p><p>  GUILayout.Label("You won!");</p><p>  if(GUILayout.Button("Play again") ){</p><p>  Application.L

30、oadLevel(Application.loadedLevel);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  public void FoundGem()</p>

31、<p><b>  {</b></p><p>  foundGems++;</p><p>  if (foundGems >= totalGems)</p><p><b>  {</b></p><p>  WonGame();</p><p><

32、b>  }</b></p><p><b>  }</b></p><p>  public void WonGame()</p><p><b>  {</b></p><p>  Time.timeScale = 0.0f; //Pause game</p>&l

33、t;p>  gameState = MarbleGameState.won;</p><p><b>  }</b></p><p>  public void SetGameOver()</p><p><b>  {</b></p><p>  Time.timeScale = 0.0f;

34、 //Pause game</p><p>  gameState = MarbleGameState.lost;</p><p><b>  }</b></p><p><b>  }</b></p><p>  4、 跟蹤小球球的攝像機(jī)設(shè)置(MarbleCamera):</p>&

35、lt;p>  using UnityEngine;</p><p>  using System.Collections;</p><p>  public class MarbleCamera : MonoBehaviour {</p><p>  public Transform target;</p><p>  public f

36、loat relativeHeigth = 10.0f;</p><p>  public float zDistance = 5.0f;</p><p>  public float dampSpeed = 2;</p><p>  void Update () {</p><p>  Vector3 newPos = target.pos

37、ition + new Vector3(0, relativeHeigth, -zDistance);</p><p>  transform.position = Vector3.Lerp(transform.position, newPos, Time.deltaTime*dampSpeed);</p><p><b>  }</b></p><

38、;p><b>  }</b></p><p>  八、關(guān)于服務(wù)器及網(wǎng)絡(luò)模塊的設(shè)計(jì)及實(shí)現(xiàn)</p><p>  網(wǎng)絡(luò)模塊的設(shè)計(jì)主要為了實(shí)現(xiàn)網(wǎng)絡(luò)版的服務(wù)端與客戶端之間的連接以及它們之間數(shù)據(jù)的傳送。圖展示了網(wǎng)絡(luò)模塊的結(jié)構(gòu)圖,網(wǎng)絡(luò)模塊主要由客戶機(jī)服務(wù)器兩部分組成。</p><p>  在使用TCP協(xié)議時(shí),一般服務(wù)端進(jìn)程先使用socket調(diào)用得到一個(gè)

39、描述符,然后使用bind調(diào)用將一個(gè)名字 與socket描述符連接起來,對(duì)于Internet域就是將Internet地址聯(lián)編到socket。之后,服務(wù)端使用listen調(diào)用指出等待服務(wù)請(qǐng) 求隊(duì)列的長度。然后就可以使用accept調(diào)用等待客戶端發(fā)起連接,一般是阻塞等待連接,一旦有客戶端發(fā)出連接,accept返回客戶的地址信息,并返回 一個(gè)新的socket描述符,該描述符與原先的socket有相同的特性,這時(shí)服務(wù)端就可以使用這個(gè)新的socke

40、t進(jìn)行讀寫操作了。一般服務(wù)端可能在 accept返回后創(chuàng)建一個(gè)新的進(jìn)程進(jìn)行與客戶的通信,父進(jìn)程則再到accept調(diào)用處等待另一個(gè)連接。客戶端進(jìn)程一般先使用socket調(diào)用得到一個(gè) socket描述符,然后使用connect向指定的服務(wù)器上的指定端口發(fā)起連接,一旦連接成功返回,就說明已經(jīng)建立了與服務(wù)器的連接,這時(shí)就可以通過 socket描述符進(jìn)行讀寫操作了。</p><p>  一旦創(chuàng)建 Socket,在客戶端,你

41、將可以通過Connect方法連接到指定的服務(wù)器(你可以在Connect方法前Bind端口,就是以指定的端口發(fā)起連接,如 果不事先Bind端口號(hào)的話,系統(tǒng)會(huì)默認(rèn)在1024到5000隨機(jī)綁定一個(gè)端口號(hào)),并通過Send方法向遠(yuǎn)程服務(wù)器發(fā)送數(shù)據(jù),而后可以通過 Receive從服務(wù)端接收數(shù)據(jù);而在服務(wù)器端,你需要使用Bind方法綁定所指定的接口使Socket與一個(gè)本地終結(jié)點(diǎn)相聯(lián),并通過Listen方法偵 聽該接口上的請(qǐng)求,當(dāng)偵聽到用戶端的連接時(shí)

42、,調(diào)用Accept完成連接的操作,創(chuàng)建新的Socket以處理傳入的連接請(qǐng)求。使用完 Socket 后,使用 Close 方法關(guān)閉 Socket。下圖展示了網(wǎng)絡(luò)模塊流程圖,通過啟動(dòng)服務(wù)器與客戶機(jī),完成了它們之間的連接以及數(shù)據(jù)交換。</p><p><b>  游戲規(guī)則</b></p><p>  游戲規(guī)則模塊也是本文的一個(gè)重點(diǎn)部分,需要實(shí)現(xiàn)小球吃寶石游戲的基本規(guī)則,因此

43、,首先要解決的問題是小球的運(yùn)動(dòng)方向,根據(jù)軌道的方向制定小球的運(yùn)動(dòng)路線,然后要解決的問題是小球與紅寶石的接觸過程,如果能保證小球不離開軌道而且又能吃到寶石,則小球則達(dá)到初步成功;如果能吃到所有寶石,則游戲勝利;相反,如果小球不慎離開軌道,則宣布游戲失敗。</p><p><b>  用戶控制</b></p><p>  本游戲的控制很簡單,及用鍵盤的上下左右(或WSAD

44、)四個(gè)箭頭控制小球的上下左右四個(gè)方向,用戶根據(jù)自己的戰(zhàn)略方式選擇小球能吃到寶石的最佳捷徑,從而一步步吃掉所有寶石。</p><p><b>  運(yùn)行結(jié)果</b></p><p><b>  心得體會(huì)</b></p><p>  在學(xué)習(xí)并實(shí)踐的過程中,可能在腳本游戲的代碼編寫上還是出現(xiàn)最多問題的,有的時(shí)候就是照搬書本上的代碼

45、,也會(huì)出錯(cuò),不僅僅是粗心,也是我對(duì)于代碼并不熟悉導(dǎo)致的,在一遍遍的修改中,我對(duì)代碼的編寫也更加熟練,相比較之前的生疏,現(xiàn)在算是比較得心應(yīng)手了。此外,比較困擾我的就是攝像機(jī)位置的各方面調(diào)整,有的時(shí)候很難調(diào)整到想要的角度,最后只能將就,這點(diǎn)讓我很是糾結(jié)。對(duì)于這種情況,我試著各種方法達(dá)到理想效果,如果說我改變不了攝像機(jī),那我只能改變我設(shè)置的場景、對(duì)象的位置了,雖然這樣的方法比較笨,而且可能會(huì)比較繁瑣,但是最終也幫助我實(shí)現(xiàn)了想要達(dá)到的效果。我覺

46、得一些基礎(chǔ)快捷鍵要首先掌握,才能節(jié)省時(shí)間和精力。場景搭建初期要先構(gòu)思好場景的基本風(fēng)格,選擇靜態(tài)模型和裝備的時(shí)候就不會(huì)手忙腳亂了。場景和燈光基本完成時(shí),要多構(gòu)建幾次,一邊檢驗(yàn)一邊修改,這樣在后期才不會(huì)出現(xiàn)很多錯(cuò)誤,以便同組合作的同學(xué)的后修工作能很快上手。在嘗試著做游戲的同時(shí)我還是學(xué)到了很多,不能說了解但也是熟悉了這個(gè)軟件。在與同學(xué)的合作中,我學(xué)著一點(diǎn)一點(diǎn)的去完善。兩人同組合作,大家積極交流,有問題一起想辦法解決,不經(jīng)提高了工作效率,同時(shí)增

47、進(jìn)了同學(xué)之間的感情。</p><p><b>  心得體會(huì) </b></p><p>  Unity3D是一個(gè)讓人們可以輕松創(chuàng)作的多平臺(tái)的游戲開發(fā)工具,是一個(gè)全面整合的專業(yè)游戲引擎?;趗nity3d平臺(tái)開發(fā)的游戲并不多,尤其是中文游戲,開發(fā)的多數(shù)是網(wǎng)絡(luò)游戲以及第一人稱游戲,PC機(jī)上的大型游戲只有新仙劍奇?zhèn)b傳OL。其他的網(wǎng)游都是國外的,多數(shù)是韓國和歐美。unity3d

48、開發(fā)的游戲多數(shù)都是用在iphone以及android等手機(jī)端游戲,比較出名的是武士系列游戲,涂鴉保齡球,城堡勇士,3D方塊貼圖,以及很多僵尸游戲。UDK相比unity3d功能強(qiáng)大,且拓展性強(qiáng),但是要求配置也比unity3d高不少,但是不如unity3d效率高,unity3d制作游戲更快。但是關(guān)于Unity3D目前應(yīng)用情況,由百度、谷歌搜索引擎的搜索結(jié)果來看,做小型游戲、房產(chǎn)演示的作品比較多。但是,關(guān)于力學(xué)仿真模擬的產(chǎn)品很少。目前只看到過

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論