2012年6月3日 星期日

動態列表

動態列表(Dynamic List)是一個連UE本身也尚未使用的功能,UDN上也沒有相關的網頁,在此簡單的說明一下。它用於屬性視窗,原本字串或名稱屬性的預設控制項是打字輸入,使用動態列表的話,可以把控制項改成是自訂選項的下拉式清單。使用這個功能需要作三個設定:
  • 想要動態列表的字串或名稱屬性要加上元資料設定。
  • 在DefaultEditor.ini裡設定自訂屬性控制項為UnrealEd.PropertyInputCombo
  • 覆寫UObject的GetDynamicListValues()函式以自訂選項。第一個參數即為元資料設定的值。第二個參數為要傳回的選項。

範例


動態列表也可用於結構屬性的欄位,以下程式碼中的MyString和在MyStruct裡的MyName都有設定動態列表。如果使用屬性視窗檢視這個類別所建立的原型(Archetype),可以發覺它們的控制項會變成是下拉式選單。
class MyDynamicList extends Object
    native;
   
var() string MyString <DynamicList=ListName>;

struct native MyStructType
{
    var() name MyName <DynamicList=ListName>;
};

var() MyStructType MyStruct;

cpptext
{
    virtual void GetDynamicListValues(const FString& ListName, TArray<FString>& OutValues)
    {
       OutValues.AddItem( TEXT("Option 1") );
       OutValues.AddItem( TEXT("Option 2") );
       OutValues.AddItem( TEXT("Option 3") );
    }
}
在DefaultEditor.ini檔中設定相關屬性控制項為UnrealEd.PropertyInputCombo。
[UnrealEd.CustomPropertyItemBindings]
CustomPropertyInputProxies=(PropertyPathName="MyGame.MyDynamicList: MyString",PropertyItemClassName="UnrealEd.PropertyInputCombo")
CustomPropertyInputProxies=(PropertyPathName="MyGame.MyDynamicList: MyStruct.MyName",PropertyItemClassName="UnrealEd.PropertyInputCombo")

沒有留言:

張貼留言