如果要自訂型別轉換,大致需要以下步驟:
- 在列舉型別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); }
沒有留言:
張貼留言