2012年4月8日 星期日

子原型

目前UDN上還沒有子原型(Sub-Archetype)的說明,因此在此簡單地介紹一下。

子原型指一個繼承另一個原型的原型。原本修改原型的屬性也會跟著修改所有實例的對應屬性,子原型也是一樣。修改母原型的屬性也會反應到子原型身上,當然也會反應到由子原型所建立的實例上。PhysicalMaterial的Parent屬性就有點類似子原型的功能。

使用者介面


其實UE一直都有支援子原型功能,只是沒有寫使用者介面讓開發者可以直接使用。直到2012年2月版的UDK才在內容瀏覽器的內容選單裡增加了建立子原型的選項。

在此之前要建立子原型的話,可以利用關卡編輯器的內容選單的建立原型選項
步驟如下:
  • 先在內容瀏覽器內選取母原型
  • 在關卡編輯器建內立此原型的實例
  • 在實例上按右鍵並選擇建立原型選項,此即子原型
所以原本只有placeable Actor才可建立子原型,在2012年2月版增加了子原型選項後,non-placeable Actor也可建立子原型。

如何支援non-Actor原型


即使新增了子原型選單,non-Actor原型目前仍無法建立子原型。可以在原始碼中確認到這件事情:
  • UnrealEdCLR專案的
    • ContentBrowserCLR.cpp的
      • MContentBrowserControl類別的
        • ExecuteCustomObjectCommand()函式的
          • IDMN_ObjectContext_CreateSubArchetype案例中
            • 會先判斷為Actor才會建立子原型

然而可以自行為non-Actor加上建立子原型的功能。在if後加上以下的else區塊:
else
{
    UObject* SubArchetype = GUnrealEd->Archetype_CreateFromObject( CurrentObject, ArchetypeName, PackageName, GroupName );
    if( SubArchetype )
    {
        SubArchetype->SetArchetype( CurrentObject, TRUE );
    }
}

沒有留言:

張貼留言