Unity 小技巧- 關於Prefab系統

前言

在我們使用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官方文檔和介紹:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *