Actor的生成和GetDefaultObject

2021-09-19 14:41:05 字數 2310 閱讀 3164

有些時候我們需要在遊戲執行時生成基於c++類的actor。另外,我們還需要了解函式getdefaultobject的作用以及我們為什麼應該了解它!讓我們開始吧!

在本文中我們將建立兩個actor。乙個包含一些基礎的邏輯(我們將這個actor命名為usefulactor),而另乙個會在一段時間後生成usefulactor。我們第一步先新增乙個新的c++類(基於actor類),命名為usefulactor然後在它的標頭檔案中加入以下邏輯:

1.

void

dosomething()

2.

切換到你的編輯器,建立乙個基於此類的藍圖,命名為bp_usefulactor。記得要在你的藍圖中新增乙個靜態網格物體,這樣當你的actor生成的時候你可以看見它。

設定完usefulactor後,新增另乙個名為actorspawner的c++類(它也繼承自actor類)。在它的標頭檔案中,包含usefulactor.h然後加入以下**:

1.

/*blueprint reference of usefulactor class*/

2.uproperty

(editdefaultsonly,category=

"actorspawning"

)3. tsubclassof usefulactorbp;

4.5.

/*delay after the blueprint of the usefulactor will get spawned*/

6.uproperty

(editdefaultsonly, category =

"actorspawning"

)7. float timetospawn =

2.f;

8.9.

/*spawns the usefulactor blueprint*/

10.ufunction()

11.void

spawnusefulactor()

;

tsubclassof意味著該性質可以接受任何ausefulactor型別的物件。由於我們製作了乙個基於此類的藍圖,我們可以將藍圖作為該性質中的乙個引數。

記得要在actorspawner.generated.h之前包含「usefulactor.h」。否則你的專案不會成功編譯。

切換到actorspawner.cpp檔案然後新增以下功能:

1.

void aactorspawner:

:beginplay()

2.11.

void aactorspawner:

:spawnusefulactor()

12.26.

}

編譯你的**然後建立乙個基於actorspawner類的藍圖。然後開啟它,在usefulactorbp性質中選擇bp_usefulactor,不要選擇usefulactor類,如下圖所示:

epic的api提供了一些有用的spawnactor函式的過載,你可以在這裡找到它們。

我們在usefulactorbp性質中選擇藍圖類而不是c++類的原因是我們想要生成藍圖而不是c++類。儘管我們的藍圖是基於c++類的,但我們將一些特定的數值儲存在了藍圖中而不是在c++中,比如我們上文新增的靜態網格物體。在實際專案中也有可能遇到這種情況。大部分情況下,你要建立乙個基於c++類(其中包含一些自定義的性質)的actor。然後,切換到你的編輯器並為這些性質賦值。這樣當你想要生成擁有所有設定好性質的actor時你應該選擇藍圖版本的而不是c++類的。

在前面例子中,當我們生成乙個新的actor時我們儲存了乙個指標的引用。假設我們忘記儲存該引用,後來我們想要使用ausefulactor類中的dosomething函式。也許你認為這很簡單。由於我們儲存了usefulactorbp,我們只需使用它呼叫dosomething函式。但是當你鍵入以下**後:

usefulactorbp->dosomething();
你的**不能正確編譯。你會得到以下錯誤:

嗯,這就怪了!雖然tsubclassof接受任何ausefulactor的派生類,但是我們不能使用任何c++函式。這裡就要用到getdefaultobject了。該函式會得到我們上面使用的子類(其中含有c++函式)的父類。所以以下**將正確編譯和執行:

usefulactorbp->getdefaultobject()->dosomething();
另一種取得ausefulactor的c++函式的使用許可權的方法是將藍圖轉換成它的父類。但是型別轉換在效能方面通常需要很大的開銷。

Actor和AKKA的使用

com.typesafe ssl config akka 2.11 0.1.2 org.scala lang scala library com.typesafe.akka akka slf4j 2.11 2.5.23 com.typesafe.akka akka actor 2.11 2.5.23...

Actor模型和CSP模型的區別

引用至 akka erlang的actor模型與go語言的協程goroutine與通道channel代表的csp communicating sequential processes 模型有什麼區別呢?首先這兩者都是併發模型的解決方案,我們看看actor和channel這兩個方案的不同 actor模...

Actor模型和CSP模型的區別

akka erlang的actor模型與go語言的協程goroutine與通道channel代表的csp communicating sequential processes 模型有什麼區別呢?首先這兩者都是併發模型的解決方案,我們看看actor和channel這兩個方案的不同 actor模型 在a...