fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

2022年04月 | ARCHIVE-SELECT | 2022年06月

| PAGE-SELECT |

≫ EDIT

UE5/UE4 C++でアクター(Actor)をスポーン(Spawn)する(LoadSynchronous、FSoftObjectPath、SpawnActor)

C++でアクター(Actor)をスポーン(Spawn)する方法です。

こちらを参考にさせていただきました。

・[UE4] C++で動的にアクターを生成(スポーン)する方法で一番実用的だった方法
https://qiita.com/Kuroyanagi96/items/7849dfaed83fc8df5741#%E5%8F%82%E8%80%83

・【UE4】同期的なアセットのロード方法とデメリット
https://qiita.com/4_mio_11/items/00de94dbb6b6ed59176f

・UE4: C++ コード から C++ クラスまたは Blueprint のアクターを FindObject して SpawnActor する方法
https://usagi.hatenablog.jp/entry/2017/10/17/123000

参考にさせていただいたサイトにいくつかの方法が書いてあるのですが
自分の中でも一番使いやすそうなのでこちらだったので、こちらについて記載しています。

他の方法については参考サイトを見ていただければと思います。

わかりやすく簡単なアクター(Actor)をスポーン(Spawn)する書き方はこちら。

// アクターのパス。BP_Actor を生成したい場合は後ろに「.BP_Actor_C」を追加する
FString aAssetPath = "/Game/BP_Actor.BP_Actor_C";

// アセットを読み込む(同期)
TSubclassOf< AActor> aActorClass = TSoftClassPtr< AActor>(FSoftObjectPath(*aAssetPath)).LoadSynchronous();
if(aActorClass != nullptr){

// スポーン
TObjectPtr< AActor> aActor = GetWorld()->SpawnActor< AActor>(aActorClass);

// スポーンしたアクターへ何か処理をしたい場合
aActor->SetXXX();

}

「LoadSynchronous」関数でアセットを読み込んで「SpawnActor」で生成するといった感じですね。
かなりシンプルなので個人的にはこれでよいのかなと思います。

「SpawnActor」関数にクラスを渡すだけでスポーンすると地面の中などだとどうも失敗することがあるようです。
なので、下記のように「FTransform」を渡してスポーンしたほうが良いと思われます。

FTransform aTransform;
TObjectPtr< AActor> aActor = GetWorld()->SpawnActor< AActor>(aActorClass, aTransform);


あとは、あるとしたら同期処理になってしまっているので、これを非同期に改良するといったところでしょうか。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

| PAGE-SELECT |