前言
在我們使用Unity這段時間以來一定對於Prefab不陌生,但到底什麼是 Prefab 呢?
Prefab簡單來說就把GameObject變成Asset,然後可以方便在不同的情況/場景中使用;
使用例子:一個信息對話框(Information Dialog),我可以把他變成一個視窗,然後用在不同的Scene上;當我修改Prefab的Dialog,相關Scene的Dialog也能同時更新。
以下為國外大神的Youtube介紹:
根據Unity官方的設計理念,Prefab像一個包著GameObject的盒子,如下圖;
白色盒子是Game Object,藍色盒子是Prefab ,如果不太懂的話可以看一下以下的影片。
新Prefab系統
其實Unity一直都有Prefab系統,不過自從2018.3版本後,改了一個新的Prefab系統,而這個系統和舊版有不少的分別,所以舊的Unity用戶使用2018.3或以後的版本,需要從新學習一下新的系統
具體新系統多了以下的功能:
- 可以支持Nested Prefabs (Prefab內可以使用其他Prefab)
- Prefab可以從其他Prefab繼承過來 (這類Prefab稱為 Prefab Variant)
- 有一個獨立處理Prefab的Workspace (這稱為Prefab Stage)
Prefab Stage
Prefab Stage 是獨立修改Prefab的地方 (利用Scene View的位置進行)
當進入Prefab Stage後,只會看到你正在處理的Prefab,而Scene就不能看見
如果希望看到Scene,可以利用GameView來查看相關效果
另外,Unity官方建議我們盡量在Prefab Stage進行修改,不是在SceneView中修改。
Prefab相關用語
- Prefab: 就是Prefab – 應來自”Prefabricated Object(預製件)”的簡稱
- Prefab Variant: 繼承Prefab的Prefab
- Prefab Instance: Prefab的副本 / 由Prefab Asset中創建的Game Object
- Nested Prefab: Unity用戶期待已久的功能,Prefab中可以包含其他Prefab
- Override: Prefab Instance改動了的東西
- Revert: 還原,取消改動,把Prefab的內容
- Unpack: 解除Prefab,就是把Prefab Instance變成一般的Game Object,但Nest Prefab不會被unpack
- Unpack Completely: 把Prefab Instance完全變成Game Object
Prefab相關標記
功能清單
製做Prefab
做法1
- 把Game Object拉到Asset文件夾
做法2
- 把Prefab拉到Asset文件夾
- 選擇”Original Prefab”
製做Prefab Variant
- 把Prefab拉到Asset文件夾
- 選擇”Prefab Variant”
進入Prefab
- 雙擊(Double Click)Prefab Instance
- 點擊 “>”
- 點擊 “Open Prefab” (Asset中) 或 “Open” (Scene中)
解除Prefab
- 在Scene內,選擇Prefab Instance;
- 右鍵打開菜單
- 選擇”Unpack Prefab” – 把Prefab Instance變成Game Object, 保留Nested Prefab
- 選擇”Unpack Prefab Completely” – 把Prefab Instance完全變成Game Object
把在Scene的改動更新到Prefab
- 在Scene內,選擇Prefab Instance;
- 在Inspector的Prefab位置,點Override
- 把全部改動更新:選擇”Apply All”
- 把部份改動更新:先選希望修改的Component,然後選擇”Apply”
取消Scene的改動
- 在Scene內,選擇Prefab Instance;
- 在Inspector的Prefab位置,點Override
- 把全部改動取消:選擇”Revert All”
- 把部份改動取消:先選希望修改的Component,然後選擇”Revert”
Prefab Instance不容許的修改
- 在Scene View中,不能刪除任何Prefab中的Game Object
- 在Scene View中,不能修改任何Prefab中的Game Object順序
(但是這些可以在Prefab Stage內進行)
Prefab Instance容許的修改
- 可以修改任何Component屬性的值;相關屬性有藍色的標記
- 可以增加GameObject到Prefab上;相關物件會有”+”的標記
- 可以增加對Prefab中的GameObject加添Component;相關Component會有”+”的標記
- 可以減少Prefab中的GameObject的Component: 相關Component會有”-“的標記
Auto Save ON/OFF
- 在Prefab Stage View的左上部份,有AutoSave的選項
- 如果進行測試的修改或Prefab很大時,可以考慮關掉AutoSave
小結
新的Prefab其實很好用,有以下優點:
- 支持Nested Prefab
- 有獨立的Prefab Editor可以減少不少錯誤
- 修改的標記比較以前清楚
不過這系統還不少需要注意的需要,大家使用時,需要對Prefab系統有多點認識
參考資料
在網路上,其實也寫了不少關於Prefab 系統的東西,大家也可以參考
Unity官方文檔和介紹:
- Introducing New Prefab Workflow
https://blogs.unity3d.com/2018/06/20/introducing-new-prefab-workflows/ - Introducing the new prefab workflow – Unity at GDC 2019
https://www.youtube.com/watch?v=b9wfVzkubzA - Unite Berlin 2018 – Technical Deep Dive into the New Prefab System
https://www.youtube.com/watch?v=J9WFcPbxOhQ