Unity 場景管理/切換


SceneManager

  

場景管理器,包含多個與場景管理相關的函數,將這些函數結合使用就能實現多種場景的切換方式,並提高游戲性能。

 

LoadScene + GetSceneByBuildIndex + LoadSceneMode

LoadScene()

 

在大多數情況下,為了避免在加載時出現暫停或者性能問題,應該使用該函數的異步版本:LoadSceneAsync()。

使用 LoadScene() 時,加載不會立即發生,它會在下一幀中完成。這種半異步行為就可能導致幀斷續,並且可能會造成混亂。

GetSceneByBuildIndex()

它的作用顧名思義就是獲取 Build Settings 中場景的下標。

場景為先加載,后激活的,LoadSceneMode(加載模式)有兩種:

使用 Slingle 模式:關閉已經加載的所有場景,只加載一個新的場景,新場景將被添加到 SceneManager 的目錄當中。

使用 Additive 模式:其他已加載的場景仍然保持激活的狀態,同時加載一個新的場景。

 

SetActiveScene + GetActiveScene

SetActiveScene()

激活已加載的場景,如果場景未加載,則返回 false。

GetActiveScene()

獲取已激活的場景。

 

CreateScene + MergeScenes

CreateScene()

運行時創建一個新的場景。

MergeScenes()

將源場景的內容合並到目標場景當中,並刪除源場景;源場景根目錄下的所有游戲對象都將移動到目標場景的根目錄下。

需要注意的是,該函數具有破壞性 —— 合並完成后,源場景將被銷毀。

 

MoveGameObjectToScene

將 GameObject 從當前場景移動到指定的新場景。

只能將根游戲對象從一個場景移動到另一個場景。這意味着要移動的 GameObject 不能是其他場景中任何其他 GameObject 的子對象。

這僅適用於將 GameObjects 移動到已加載的場景(LoadSceneMode.Additive)。

如果要加載單個場景,要確保在移動到新場景的 GameObject 上使用 DontDestroyOnLoad,否則 Unity 就會在加載新場景的時候將它刪除。

 

UnloadSceneAsync

銷毀與指定場景關聯的所有 GameObject,並從 SceneManager 中移除場景。

指定的場景名稱可以是完整的場景路徑,也可以是場景名稱。

如果僅給出場景名稱,則將卸載匹配列表中的第一個場景,所以如果有多個具有相同名稱但路徑不同的場景,就要使用完整的場景路徑。

需要注意的是:

    • 不區分大小寫,並且由於它是異步處理,因此無法保證完成的時間。

    • 資產目前尚未卸載。為了釋放資產內存,可以調用 Resources.UnloadUnusedAssets()。

    • 如果沒有要加載的場景,則無法使用 UnloadSceneAsync()。例如,只有單個場景的項目就無法使用該函數。

 

 

 

 

 

***| 以上內容僅為學習參考、學習筆記使用 |***


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM