戰鬥訓練場 - Unity基本觀念

Unity基本功(8) – 重新載入&場景轉換

※中肯辭典

(註:有別於官方文件上的嚴謹說明,在此以工程師的角度來簡短說明此元素的特質與使用時機。)

介紹如何在Unity實作「Replay」、「進入商店」等遊戲中常見的場景轉換機制。



螢幕快照 2017-07-10 上午12.28.29.png

在知名遊戲"Angry Bird"中,每當你通過關卡,就會出現這三個按鈕:「回到首頁」、「再玩一次」、「到下一關」,你有沒有想過這種場景的轉換是怎麼實作的呢?

廢話不多說,在Unity裡,若我們想要使用這樣的功能,就必須介紹一個關鍵的指令:

Application.LoadLevel(Scene序號 ex. 0、1 …)


大家應該都有發現,每當你開啟新的Project,編排了一些物件、撰寫了一些程式碼後,當你想儲存當前進度時,Unity會要求你先為這個"Scene"存檔。

螢幕快照 2017-07-10 下午9.01.10.png

Scene就是一個個畫面的感覺,「大廳」是一個Scene、「商店」可能是另一個Scene、每一個關卡也各自是一個Scene。因此,一款遊戲並不是同一個檔案從頭做到尾,而是很多個Scene檔(副檔名為.unity)拼裝而成的。所以,我們要做的就是把場景轉換的線路接好

 

首先,我們到Unity上方的書籤列點選File -> Build Settings。

螢幕快照 2017-07-10 上午12.42.37

按下中間偏右的"Add Open Scenes"就可以把當前這個叫做"Stage1″的場景加入建置設定中,

已在清單中的Scene就會獲得一個自己的編號顯示在右邊。

螢幕快照 2017-07-10 上午12.43.02

為了測試場景切換,我們可以回到編輯介面中,將原有的場景佈置做一點更動,然後按下

File -> Save Scene as…來儲存第二個Scene,取名叫做"Stage2″。

如此一來,我們就有場景0和場景1了。透過點擊拖曳清單裡的項目,我們可以任意交換他們的順序。


接下來,我們可以在任意一個場上的物件裡加入以下的code。

螢幕快照 2017-07-10 上午12.49.40

一般都會將場景轉換放在「按鈕被觸發」、「分數達到過關目標」等時間點的,但在這裡為了直接測試效果,我們一樣利用鍵盤來控制。按下M就能在兩個關卡間往返。

 

Application.LoadLevel(0)代表前往第0個場景,在這裡也就是"Stage1″。

Application.loadedLevel回傳的值是一個int,代表的是當前的場景序號。

所以Line 16 撰寫的 Application.LoadLevel(Application.loadedLevel)就是把當前的場景重新載入的意思,所有的物件都會回到原位。

而Line 20 ~ 24 則是做一個直觀的切換,如果現在是場景0,按下按鍵後就切到場景1,以此類推。

在這裡我用小雞跟箱子來做出兩個箱子的區別

這個是Stage1

螢幕快照 2017-07-10 下午9.21.42.png

而這個是Stage2

螢幕快照 2017-07-10 下午9.21.50.png

如果上述的程序都有成功,就會有像影片這樣的效果:按下R時會Replay,按下M時則會切換關卡。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s