在C++中要存取UnrealScript物件的屬性時,一般的做法是宣告此類別為原生類別,這樣在編譯UnrealScript時會自動產生對應的C++類別定義,就可讓C++認得此類別的成員。不過如果是非原生類別,難道就沒有其他方法可以存取其屬性嗎?答案是當然可以,不然用C++實作的UnrealScript虛擬機就寫不出來了。
由UnrealScript定義的類別必須繼承自Object,它在C++中的對應型別為UObject。由於Object這個名稱容易混淆,所以接下來皆以UObject稱之。每個UObject都會記得自己當初建立時的UnrealScript類別,在UnrealScript中可以用Object:Class屬性取得,在C++中可以用UObject::GetClass()函式取得。它在C++中是一個型別為UClass的物件,記錄著對應UnrealScript類別的相關資訊,可以從這裡得知這個類別包括屬性在內的所有成員。
取得屬性
以下程式碼展示如何在一個UObject中取得其所有屬性:
for( UProperty* Property = GetClass()->PropertyLink; Property; Property = Property->PropertyLinkNext )
{
...
}
UnrealScript屬性在C++中的對應型別稱為UProperty,它是一個基底類別,依據屬性的型別有各自的具象類別: