Nested Prefab Mode 嵌套預制體 保存問題 Dirty


Unity2018.3 Nested Prefab Mode 嵌套預制體

Unity2018.3開始,新增了一個Prefab Mode,俗稱嵌套預制體,在Prefab里套Prefab。實際應用中多少會有些坑。

  • 資源打包,Assetbundle一直都有依賴的問題。所以嵌套的Prefab理所當然要預加載。
  • 腳本修改Prefab,很多生產環境下都會有代碼處理Prefab的情況,而這次新增的Prefab Mode,與之前的編輯模式是不同的,所以升級后需做兼容性修改。
  • 進入Prefab Mode就是雙擊Assets里的Prefab文件。
  • 詳細教程 https://unity.com/prefabs

關注點 Prefab Mode

Scene Mode Prefab Mode
Hierarchy 里操作的對象本質 Prefab Instance 實例 Assets里的UnityEngine.Object文件
Apply 保存過程 從Instance寫入到Asset里的Prefab文件 直接操作Assets里的Prefab文件
SetDirty 腳本修改Prefab上的對象 EditorUtility.SetDirty(Object) 暫無(目前U3D問答上很多人在問)
設置場景Dirty EditorSceneManager.GetActiveScene() PrefabStageUtility.GetCurrentPrefabStage().scene)
Apply時的回調 PrefabUtility.prefabInstanceUpdated PrefabStage.prefabSaving

實際使用總結

  • 官網上宣稱的Prefab Mode,其實在代碼里的引用叫做Prefab Stage
  • 通過腳本來操作Prefab的時候,需要注意PrefabStageUtility.GetCurrentPrefabStage()優先判斷是否在Prefab Mode
  • Prefab Mode下,如果通過代碼腳本修改對象屬性,一定要注意EditorSceneManager.MarkSceneDirty的調用。
  • 注意Scene View右上角的Auto Save按鈕

參考

官方教程
腳本參考PrefabStage


免責聲明!

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



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