Prafab Varient 預製體變體

章校長發表於2020-12-02
預製體與類的類比思維:
    預製體相當於一個類,當它應用到場景當中,就是一個例項。 類的繼承特性也充分運用到預製體中,即預製體變體。

相似預製體的需求場景:
        例子1:多個遊戲的視窗背景排版一樣,只是裡面的內容有所不同,下面兩個彈框的背景圖,標題圖,內容圖和關閉按鈕都相同,但是裡面的具體功能控制元件不同。
Prafab Varient 預製體變體     Prafab Varient 預製體變體
    例子2:您可能希望在遊戲中使用幾種不同型別的機器人,這些機器人全都基於同一個基本機器人預製件。但是,您可能想要一些機器人攜帶物品(加子物體),一些機器人以不同的速度移動(調整引數),或者一些機器人發出額外的聲音效果(新增元件)。
    這兩個例子都是需要兩個很多相似之處、但是又不完成相同的預製體,最原始的方法是在做好第一個預製體後,直接複製一個進行修改即可;但這樣做有個明顯弊端,就是公共的遊戲元素需要修改時,我需要點開每個預製體進行相同的修改操作,例如替換背景圖,修改關閉按鈕的大小與位置,而且逐一修改很難保證步調一致。
    這時候,如果能夠將預製體的相同部分抽象出來,在抽象的預製體(原始預製件)的基礎上建立多個屬性不同的變體,即Unity提供的共功能,預製體變體(Prafab Varient)。

官文名:PrefabVariants.html
預製體變體的建立:
    1.將場景中的預製體例項拖動到Project皮膚中,會彈出提示建立新預製體還是預製體變體的皮膚
Prafab Varient 預製體變體
 Original Prefab即建立一個全新的預製體,Prefab Variant即建立一個預製體變體。
    2.可在 Project 檢視中的預製件上右鍵單擊,然後選擇 Create > Prefab Variant。

預製體變體的特性(和預製體例項的特性完全相同)

  1. 屬性繼承:如果子Prefab的某些屬性不動, 則父Prefab的屬性影響子Prefab的屬性,
  2. 屬性定製:如果對子Prefab的某些屬性進行修改/覆蓋, 則父Prefab的屬性無法影響,


注意:不合理的抽象不如不抽象,使用預製體變體和使用基類一樣,應儘可能將具有相同功能或者佈局的預製體的公共部分抽離出來作為本體。而對於本來就關聯不大或者有巨大差別的遊戲物件,則分為兩個不同的預製體也許比在建立預製體變體更合適;
        如果在後續的開發過程中,發現預製體變體和本體相差過大,則可以通過“UnPack Prafab Completely”解除繼承。





















相關文章