Prafab Varient 預製體變體

預製體與類的類比思維:
    預製體相當於一個類,當它應用到場景當中,就是一個實例。 類的繼承特性也充分運用到預製體中,即預製體變體。
相似預製體的需求場景:
        例子1:多個遊戲的窗口背景排版一樣,只是裏面的內容有所不同,下面兩個彈框的背景圖,標題圖,內容圖和關閉按鈕都相同,但是裏面的具體功能控件不同。
     
    例子2:您可能希望在遊戲中使用幾種不同類型的機械人,這些機械人全都基於同一個基本機械人預製件。但是,您可能想要一些機械人攜帶物品(加子物體),一些機械人以不同的速度移動(調整參數),或者一些機械人發出額外的聲音效果(添加組件)。
    這兩個例子都是需要兩個很多相似之處、但是又不完成相同的預製體,最原始的方法是在做好第一個預製體後,直接複製一個進行修改即可;但這樣做有個明顯弊端,就是公共的遊戲元素需要修改時,我需要點開每個預製體進行相同的修改操作,例如替換背景圖,修改關閉按鈕的大小與位置,而且逐一修改很難保證步調一致。
    這時候,如果能夠將預製體的相同部分抽象出來,在抽象的預製體(原始預製件)的基礎上創建多個屬性不同的變體,即Unity提供的共功能,預製體變體(Prafab Varient)。
官文名:PrefabVariants.html
預製體變體的創建:
    1.將場景中的預製體實例拖動到Project面板中,會彈出提示創建新預製體還是預製體變體的面板
 Original Prefab即創建一個全新的預製體,Prefab Variant即創建一個預製體變體。
    2.可在 Project 視圖中的預製件上右鍵單擊,然後選擇 Create > Prefab Variant。
預製體變體的特性(和預製體實例的特性完全相同)

  1. 屬性繼承:如果子Prefab的某些屬性不動, 則父Prefab的屬性影響子Prefab的屬性,
  2. 屬性定製:如果對子Prefab的某些屬性進行修改/覆蓋, 則父Prefab的屬性無法影響,
注意:不合理的抽象不如不抽象,使用預製體變體和使用基類一樣,應儘可能將具有相同功能或者布局的預製體的公共部分抽離出來作為本體。而對於本來就關聯不大或者有巨大差別的遊戲對象,則分為兩個不同的預製體也許比在創建預製體變體更合適;
        如果在後續的開發過程中,發現預製體變體和本體相差過大,則可以通過「UnPack Prafab Completely」解除繼承。
Tags: