UE5/UE4 C++でアクター(Actor)をスポーン(Spawn)する(LoadSynchronous、FSoftObjectPath、SpawnActor)
こちらを参考にさせていただきました。
・[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)する書き方はこちら。
「LoadSynchronous」関数でアセットを読み込んで「SpawnActor」で生成するといった感じですね。// アクターのパス。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();}
かなりシンプルなので個人的にはこれでよいのかなと思います。
「SpawnActor」関数にクラスを渡すだけでスポーンすると地面の中などだとどうも失敗することがあるようです。
なので、下記のように「FTransform」を渡してスポーンしたほうが良いと思われます。
FTransform aTransform;
TObjectPtr< AActor> aActor = GetWorld()->SpawnActor< AActor>(aActorClass, aTransform);
あとは、あるとしたら同期処理になってしまっているので、これを非同期に改良するといったところでしょうか。
| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑