如果要自訂型別轉換,大致需要以下步驟:
- 在列舉型別ECastToken中新增一個成員代表這個轉換指令。
- GConversions的第一個索引是目標型別,第二個索引是來源型別。我們需要修改對應的GConversions元素成自訂的轉換指令。
- 撰寫對應的轉換函式並且註冊到GCasts。
範例
本例示範如何新增一個從物件轉成名稱的型別轉換,轉換後變成該物件的名稱。首先新增CST_ObjectToName代表這個轉換:
enum ECastToken
{
...
CST_ObjectToName = 0x61,
CST_Max = 0xFF,
};
然後在GConversions中修改對應欄位為CST_ObjectToName:static DWORD GConversions[CPT_MAX][CPT_MAX] =
{
/* None Byte Int Bool Float Object ...
...
/* Name */ { CST_Max, CST_Max, CST_Max, CST_Max, CST_Max, CST_ObjectToName, ...
...
};
最後撰寫對應的轉換函式並且註冊到GCasts即可。void UObject::execObjectToName( FFrame& Stack, RESULT_DECL )
{
P_GET_OBJECT(UObject,Obj);
*(FName*)Result = Obj ? Obj->GetFName() : NAME_None;
}
IMPLEMENT_CAST_FUNCTION( UObject, CST_ObjectToName, execObjectToName );
然後就可以在UnrealScript中進行原本不支援的物件到名稱轉換:class MyCheatManager extends GameCheatManager within GamePlayerController;
exec function TestObjectToName()
{
local name n;
n = name(self);
`log(n);
}
沒有留言:
張貼留言