2014年4月29日 星期二

使用C++實作UnrealScript也認得的原生類別

一般而言,想要使用C++實作類別給UnrealScript使用時,通常會使用UnrealScript撰寫原生類別,這樣會編譯器自動產生對應的C++類別定義,比較方便。但如果想要連一行UnrealScript都不寫,只用C++實作出UnrealScript也認得的類別,其實還是做得到的。

C++的類別可以分為POD(Plain Old Data)以及非POD。POD可以對應到UnrealScript的struct;而非POD的類別則要對應到UnrealScript的class,也就是必須繼承UObject才行。這種類別稱為固有類別(Intrinsic Class)。

固有類別比起一般的C++類別多了一些要注意的事項:
  • 必須直接或間接繼承UObject
  • 要在類別定義內使用DECLARE_CLASS_INTRINSIC巨集
  • 若有想要在UnrealScript中使用的欄位,要在成員函式StaticConstructor註冊。
  • 若有參考到UnrealScript物件的欄位,必需使用EmitObjectReference函式或AddReferencedObjects函式註冊。
  • 可在成員函式InitializeIntrinsicPropertyValues給定欄位初值。
  • 在AUTO_INITIALIZE_REGISTRANTS_XXX使用StaticClass()註冊,XXX替換成實際的Script Package名稱。