預制件-預制件變體
希望預制件有一組預定義的變化時,預制件變體非常有用。
例如,您可能希望在游戲中使用幾種不同類型的 GermSlimeTarget,這些全都基于同一個基本 GermSlimeTarget 預制件。但是,您可能想要一些 GermSlimeTarget 攜帶物品,一些以不同的速度移動,或者一些發(fā)出額外的聲音效果。
為此,您可以設置初始 GermSlimeTarget 預制件來執(zhí)行您希望所有 GermSlimeTarget 共同執(zhí)行的所有基本操作,然后可以創(chuàng)建多個預制件變體來實現(xiàn)以下目的:
通過在腳本上使用屬性覆蓋來更改速度,使 GermSlimeTarget 更快移動。
通過將額外的游戲對象附加到手臂,使 GermSlimeTarget 攜帶物品。
通過添加一個播放格喳聲的 AudioSource 組件,使 GermSlimeTarget 發(fā)出子彈般的格喳聲。
預制件變體繼承另一個稱為基礎預制件的預制件的屬性。對預制件變體進行的覆蓋優(yōu)先于基礎預制件的值。預制件變體可以使用任何其他預制件作為其基礎預制件(包括模型預制件或其他預制件變體)。
創(chuàng)建預制件變體
可通過多種方法基于另一個預制件創(chuàng)建預制件變體。
可在 Project 視圖中的預制件上右鍵單擊,然后選擇?Create > Prefab Variant。這樣將創(chuàng)建所選預制件的變體,該變體最初沒有任何覆蓋??梢栽陬A制件模式下打開預制件變體,然后開始為其添加覆蓋。
還可以將預制件實例從 Hierarchy 窗口中拖動到 Project 窗口中。執(zhí)行此操作時會出現(xiàn)一個對話框,詢問是要創(chuàng)建新的原始預制件還是預制件變體。如果選擇預制件變體,則會根據(jù)拖動的預制件實例創(chuàng)建新的預制件變體。先前位于該實例上的所有覆蓋現(xiàn)在都位于新的預制件變體中??梢栽陬A制件模式下打開該變體以添加更多覆蓋或者是編輯或刪除覆蓋。
預制件變體將顯示帶有箭頭的藍色預制件圖標。

編輯預制件變體
在預制件模式下打開預制件變體時,根將顯示為帶有藍色預制件圖標的預制件實例。此預制件實例表示產生預制件變體的基礎預制件,而不表示預制件變體本身。對預制件變體所做的任何編輯都將成為存在于變體中的該基礎預制件的覆蓋。

在上面的截屏中,即使選擇?GermSlimeTarget With GermOBlaster?根游戲對象并單擊 Inspector 中的?Select?按鈕,也將選擇基礎預制件?GermSlimeTarget?而不是變體?GermSlimeTarget With GermOBlaster__,因為預制件實例是基礎預制件?GermSlimeTarget__ 的一個實例,而?Select?按鈕始終選擇實例來自的預制件資源。
與任何預制件實例一樣,可以在預制件變體中使用預制件覆蓋,例如修改的屬性值、添加的組件、刪除的組件以及添加的子游戲對象。也存在相同的限制:無法更改預制件變體中來自基礎預制件的游戲對象的父級。也無法從預制件變體中刪除存在于基礎預制件中的游戲對象。但是,可以停用游戲對象(作為屬性覆蓋)來達到與刪除游戲對象相同的效果。
注意:在預制件模式下編輯預制件變體時,應了解應用這些覆蓋(通過 Overrides 下拉窗口或上下文菜單)會使變體的變化應用于基礎預制件資源。這通常不是您想要的效果。預制件變體的要點是提供一種方便的方法來存儲有意義且可重復使用的覆蓋集合,這就是為什么這些覆蓋通常應該保留為覆蓋而不要應用于基本預制件資源的原因。為了說明這一點,如果將額外的?GermOBlaster?游戲對象應用于基礎預制件資源(“GermSlimeTarget”),那么預制件資源也將具有該?GermOBlaster。GermSlimeTarget With GermOBlaster?變體的關鍵在于,只有此變體攜帶 GermOBlaster,所以添加的?GermOBlaster?游戲對象應該留在預制件變體內作為覆蓋。
打開 Overrides 下拉窗口時,始終可以在其標題中看到覆蓋所針對的對象,以及覆蓋存在于哪個背景中。對于預制件變體,標題將顯示覆蓋是針對基礎預制件并存在于預制件變體中。為了使這一點更加清晰,__Apply All__ 按鈕也會顯示?Apply All to Base。
