SceneManager
場景管理器,包含多個與場景管理相關的函數,將這些函數結合使用就能實現多種場景的切換方式,並提高游戲性能。
LoadScene + GetSceneByBuildIndex + LoadSceneMode
在大多數情況下,為了避免在加載時出現暫停或者性能問題,應該使用該函數的異步版本:LoadSceneAsync()。
使用 LoadScene() 時,加載不會立即發生,它會在下一幀中完成。這種半異步行為就可能導致幀斷續,並且可能會造成混亂。
它的作用顧名思義就是獲取 Build Settings 中場景的下標。
場景為先加載,后激活的,LoadSceneMode(加載模式)有兩種:
使用 Slingle 模式:關閉已經加載的所有場景,只加載一個新的場景,新場景將被添加到 SceneManager 的目錄當中。
使用 Additive 模式:其他已加載的場景仍然保持激活的狀態,同時加載一個新的場景。
SetActiveScene + GetActiveScene
激活已加載的場景,如果場景未加載,則返回 false。
獲取已激活的場景。
CreateScene + MergeScenes
運行時創建一個新的場景。
將源場景的內容合並到目標場景當中,並刪除源場景;源場景根目錄下的所有游戲對象都將移動到目標場景的根目錄下。
需要注意的是,該函數具有破壞性 —— 合並完成后,源場景將被銷毀。
MoveGameObjectToScene
將 GameObject 從當前場景移動到指定的新場景。
只能將根游戲對象從一個場景移動到另一個場景。這意味着要移動的 GameObject 不能是其他場景中任何其他 GameObject 的子對象。
這僅適用於將 GameObjects 移動到已加載的場景(LoadSceneMode.Additive)。
如果要加載單個場景,要確保在移動到新場景的 GameObject 上使用 DontDestroyOnLoad,否則 Unity 就會在加載新場景的時候將它刪除。
UnloadSceneAsync
銷毀與指定場景關聯的所有 GameObject,並從 SceneManager 中移除場景。
指定的場景名稱可以是完整的場景路徑,也可以是場景名稱。
如果僅給出場景名稱,則將卸載匹配列表中的第一個場景,所以如果有多個具有相同名稱但路徑不同的場景,就要使用完整的場景路徑。
需要注意的是:
-
-
不區分大小寫,並且由於它是異步處理,因此無法保證完成的時間。
-
資產目前尚未卸載。為了釋放資產內存,可以調用 Resources.UnloadUnusedAssets()。
-
如果沒有要加載的場景,則無法使用 UnloadSceneAsync()。例如,只有單個場景的項目就無法使用該函數。
-
***| 以上內容僅為學習參考、學習筆記使用 |***