ワールドパーティション(以降、WP)を利用したマップにおいて、ランタイムで動的に生成されたアクターはグリッド生成に参加せず従ってグリッド分割もされないという認識です。
一方でランタイムでアクターを生成することは多くのケースで存在し、それらが多ければ多いほどパフォーマンスに影響が出る一方でグリッド分割されないとパフォーマンスに影響が現れてしまうと思います
- ここでのランタイムの生成とはSpawnActorなどで動的に生成されたアクターのことを指します
上記のようなケースでもアクターをWPのグリッドで分割したい場合、マップ上に予め何らかのアクターを置いておいてその子としてスポーンさせるなどの方法を考えていたのですが、こちら以外の方法でランタイムにスポーンさせるアクターをグリッド分割に参加させるより良い方法があれば教えていただけないでしょうか?
- 事前準備や別途専用のアクターを利用する方法が以外の方法があればなお良いです
以上、よろしくお願いいたします。
お世話になっております。
ご質問の「グリッド分割される」について詳細をお伺いしたいのですが、「SpawnActor等によりランタイムで生成されたActorが、グリッド分割されたセルに従ってレベルストリーミング時にON/OFFで消えない事象が発生している」という理解で正しいでしょうか?もしそれが正しい理解であるとしたら、ランタイムで生成するActorのIsSpatiallyLoaded=Trueとなっていれば、ストリーミングに従ってActorも生成/破棄が発生するものと認識しております。お手数ですが、こちらの内容についてお知らせ頂けますと幸いです。
ご返答ありがとうございます。
>「SpawnActor等によりランタイムで生成されたActorが、グリッド分割されたセルに従ってレベルストリーミング時にON/OFFで消えない事象が発生している」という理解で正しいでしょうか?
こちらですがグリッド情報はPIEプレイ時/クック時などに都度クックされるため、そのタイミングで該当アクターがレベル内に存在しない場合はグリッド情報に反映されず(=IsSpatiallyLoadedの設定に限らず)、従ってロードが常にされる物と認識しておりました
- エディターのアウトライナーには存在せず、ゲームプレイ以降に生成されるアクターがこのグリッド情報が保存されたStreamingGenerationログファイル内に存在しないことを確認済です
仮に上記のようなランタイムに生成されるアクターもグリッド分割が行われる場合(IsSpatiallyLoaded=trueと仮定)、どのような流れでどのグリッドに配置されるか決定されますでしょうか?
- グリッド情報は事前に焼かれてそちらが利用されるので、動的に・後からアクターをこのグリッド分割データに追加することは基本的に出来ないと考えておりました
以上、よろしくお願いいたします。
ご回答頂きありがとうございます。
大変申し訳ございません。ワールドパーティションのストリーミングシステムを正しく認識できておらず失礼いたしました。現行のワールドパーティションのストリーミングにおいては、ランタイムで生成されたActorはストリーミングの対象とはならず、ワールドパーティションの設定に関係なく、ロード/アンロードするような状況かではないかと思います。
実現する方は既に挙げて頂いた方法も含めてですが、いずれもそれなりの手間と時間を要しますが、それ以外であまり有用な方法はないかと思われます。
・レベル上に配置されたActorの子Actorとして生成する
・SignificanceManagerや独自のシステムなどで、ランタイム生成されたActorに対してロード/アンロードを制御する
よろしくお願いします。