2012年3月7日 星期三

UnrealScript和C++之間的函式呼叫

UnrealScript是用C++實作的腳本語言。雖然有些功能可以用UnrealScript實作,不過在需要效能的場合還是得跟C++溝通。UnrealScript類別若宣告成native,會在自動生成的C++標頭檔裡產生對應的C++類別。當然這功能需要有原始碼授權才能正常運作。

UnrealScript呼叫C++函式


UnrealScript不能直接存取C++的函式。不過可以在UnrealScript宣告native function,在C++實作,使得UnrealScript函式可以呼叫native function來使用C++函式。例如在Actor.uc檔內:
class Actor extends Object
    native
...
native final function bool Move( vector Delta );
當然前提是宣告這個native function所使用的型別UnrealScript也認得。UnrealScript不認識的型別(例如std::string)本來就無法在UnrealScript中使用,所以也不需要讓它可以被UnrealScript呼叫了。

C++呼叫UnrealScript函式


相反地,如果要讓C++能呼叫UnrealScript實作的函式,可以使用關鍵字event取代function宣告UnrealScript函式,這樣就會在自動生成的C++標頭檔內產生冠著event的同名函式。例如在Actor.uc檔內:
event PostBeginPlay();
會在EngineClassees.h內的class AActor內,自動產生如下的函式定義:
void eventPostBeginPlay()
{
...
}
所以在C++中就可以呼叫函式AActor::eventPostBeginPlay()來轉呼UnrealScript的Actor.PostBeginPlay()。

UnrealScript和C++互相呼叫

 

如果是想要寫可以被C++及UnrealScript呼叫的函式的話,native functionevent都可以。只是差在一個是在C++中實作,一個是在UnrealScript中實作。

但是如果是class static function要可以被C++及UnrealScript呼叫的話,由於宣告在UnrealScript中的static native function在C++不是class static function的關係,所以只好用C++寫完class static function後,在UnrealScript中再宣告一個static native function去呼叫它。

沒有留言:

張貼留言