はじめに
World Partition を使用して気になった点がありましたので、少し検証してみました。
World Partition はグリッド状に空間を分割して、セル単位で配置物のロード、アンロードを行えるオープンワールド向けの機能です。(大雑把な理解)
そこで思いました。
異なるセルのアクターを参照していた場合、どのようにロードされるのだろう......と。
前提
UE5.7.1 を使用して検証を行いました。
WorldPartition の細かい概念などについては触れません。
公式ドキュメントをご参照ください。
本題
さっそく、検証用のレベルを用意します。
ファイル → 新規レベル → 基本
からシンプルなレベルを用意します。
レベルを保存して、別のレベルへ移動。
コンテンツブラウザから先ほどのレベルを右クリックして、
「パーティション化のストリーミングサポートを追加」を選択します。

ワールドセッティングタブを開いて、「ストリーミングを有効化」のチェックを入れておきます。
これで、WorldPartition に対応したレベルのセットアップが完了です。
そして、ワールドセッティングのランタイム設定に、Main Partition という項目があると思うので、
セルのサイズ : 1600
ロードする範囲 : 1000
としておきます。(テストしやすいように小さめにしています)
そして、画像のようにアクターを配置しました。
Main Partition の
「Debug - Show Grid Preview」にチェックを入れておくと、
グリッドの境界が分かりやすくなります。

まずこれでテストすると、
それぞれのアクターが個別にロード、アンロードが行われることが確認できます。

それでは、Cube の方に Sphere をハード参照させます。
画像のように BP に変数を用意して公開しました。(後でソフト参照のテストも出来るように 2つ変数を用意しています)

2つのアクターが纏められ一つの大きなアクターとして扱われているように見えました。

次に、ソフト参照について検証してみます。
Tick で参照先アクターが存在するかをチェックして PrintString しています。

ソフト参照であれば、個別にロード、アンロードを管理できますね。
ただ、アクターが非アクティブになっているかどうかを取得する方法が分かりませんでした。
GC によって回収されるまで、インスタンスは有効な状態なので、
IsValid だけだとすり抜けてきます。
OnDestroy などを監視すればいい?
まとめ
少し触った事がある人にとっては当たり前のことかもしれませんが、
WorldPartition で管理している Actor からのハード参照、ソフト参照の挙動について検証してみました。
ハード参照しておけば必ず同時にロードされる事が保証されているので、セルの境界をまたいで参照しても安心ですね。
逆に言うと、不要なアクターがロードされてしまうケースも考えられるので、そういう場合はソフト参照なども駆使して適切に管理しましょう。


