iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0
自我挑戰組

從零開始學習Unity引擎系列 第 12

unity學習 Day12——場景與載入

  • 分享至 

  • xImage
  •  

一. 場景

一個遊戲是由很多遊戲場景所組成,就像是一部電影,一部電影是由很多場景以及幾個鏡頭組成。而場景又是由很多遊戲物件構成,遊戲物件中又有很多腳本。

在“階層”這一欄中,可以看到有三個物件,而這三個物件都位於“SampleScene”之下,而這個“SampleScene”又是位於「Assets」之下,這是 Unity 預設的場景。
https://ithelp.ithome.com.tw/upload/images/20250914/20178373ZedKt4aMjI.png

既然有預設的場景,就代表我們可以手動建立一個新的場景,在“Assets”這裡新建一個場景“Myscene”。
https://ithelp.ithome.com.tw/upload/images/20250914/20178373wn43tx2VuX.png

接下來我希望能透過程式碼自動載入到“Myscene”當中,在左上角點選“檔案”,選擇“打開設定檔”。
https://ithelp.ithome.com.tw/upload/images/20250914/20178373CDGAGxfFH5.png

這裡的作用是將需要用到的場景添加進來,供程式使用,而且每一個場景都有相對應的索引。
https://ithelp.ithome.com.tw/upload/images/20250914/20178373efgzpKfPuw.png

接下來步驟一樣,建立空物件“Scene”和控制腳本“SceneTest”,然後把腳本掛載到物件上。
場景相關的類別主要有兩種:場景類與場景管理類。要使用場景管理類,必須先引入相對應的命名空間,然後才能透過程式碼進行場景切換。
https://ithelp.ithome.com.tw/upload/images/20250914/20178373uacuy0B4CH.png

我們先在“Myscene”中什麼都沒有,點擊執行後可以發現自動跳轉到了有物件存在的“SampleScene”。
https://ithelp.ithome.com.tw/upload/images/20250914/20178373hO92OCdm9g.png

接著可以嘗試獲取當前場景,為了驗證獲取是否正確,先讓它輸出當前場景的名稱。
https://ithelp.ithome.com.tw/upload/images/20250914/20178373SbyperJHVU.png

可以看到,確實輸出了當前場景的名稱。
https://ithelp.ithome.com.tw/upload/images/20250914/201783738aNtU7U9Ca.png

二. 同步與非同步程式碼執行

看看下面這段程式碼,即使在 CPU 效能不佳的情況下也能快速執行並輸出結果。
https://ithelp.ithome.com.tw/upload/images/20250914/20178373oD4v7kVpBK.png

但如果換成下面這三種情況就不一樣了,加載都需要時間,這不是 CPU 效能能夠決定的。另外,從網路讀取資源更是無法預測,一連串耗時操作會導致我們的專案執行時間過長。想要解決這個問題,就需要用到多執行緒。Java 和 C# 都支援這項功能。

接下來回到 Unity,建立空腳本“asyncTest”與空物件“asyncTest”,然後把腳本掛上去。
注意:只要是場景相關的操作,一定要引用“場景管理類”的命名空間。接下來我們要使用“協程”方法來非同步載入場景。協程的返回值是固定格式,一定要按照下圖的方式撰寫。
https://ithelp.ithome.com.tw/upload/images/20250914/20178373GQuZ1W6VJH.png

接著宣告一個變數 operation 來接收這個結果,但此時還是會報錯,只要補上最後一步 yield return operation 就可以了。
https://ithelp.ithome.com.tw/upload/images/20250914/201783736Sra69wUVK.png

執行結果這裡就不再展示了,因為同樣是加載場景,而且如果場景中什麼都沒有的話,其實同步與非同步的速度用肉眼是無法分辨的。


上一篇
unity學習day11--路徑權限與按鍵
系列文
從零開始學習Unity引擎12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言