1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【UE5】他のレベルに配置されたActorの参照を取得するにはSoftObjectReferenceを用いる

Last updated at Posted at 2025-03-24

概要

他のレベルに配置されたActorの参照を取得するにはSoftObjectReferenceを用います。

と、ネットで調べると出てくるのですが、例えばActorが属するSubLevelのSteaming MethodがBlueprintで且つロードしていない場合だとどうなる?や具体的にどう参照を取得するか等を記載している文献が見当たらなかったので、調査いたしました。

※また、10年ほど前でまだSoftObjectReferenceがなかった?時代のネットの記事の場合はGetAllActorsofClassノードを用いている例もあります。それでも実装自体は可能です
※SoftObjectReferenceはC++的にはTSoftObjectPtrのことです

調査で用いたプロジェクトは↓にアップロードしてあります。

■環境
UnrealEngine:5.5.4
ビルド構成:DebugGame Editor

結論

  • SoftObjectReferenceから参照の取得を試みるには Resolve Soft Reference ノードを用いる
    image.png
  • Actorが属するSubLevelのSteaming Methodが「Always Loaded」の場合:参照が取れる (※アクターが存在するので)
  • Actorが属するSubLevelのSteaming Methodが「Blueprint」の場合
    • SubLevelがロードされていない場合:参照が取れない (※アクターが存在しないので)
    • SubLevelがロードされている場合:参照が取れる (※アクターが存在するので)

調査

SubLevelに配置したActorをPersistentLevelのレベルブループリントから参照を取得する実験を行います。

PersistentLevel(TestPersistentLevel)を作成しSubLevel(TestSubLevel)をくっつけます。
image.png

まず最初はTestSubLevelのSteaming Method は Always Loadedとします。
image.png

TestSubLevelにTestActor_TestSubLevelアクターを配置します。
image.png

TestPersistentLevelのレベルブループリントにSoftObjectReference_TestActor_TestSubLevelという名前のActorのSoftObjectReference型の変数を作ります。

image.png

コンパイル後、SoftObjectReference_TestActor_TestSubLevel変数のDetailからSubLevel(TestSubLevel)のアクターを設定します。
image.png

SoftObjectReference_TestActor_TestSubLevel変数のResolve Soft Reference から参照の取得を試みます。
image.png

BeginPlayからノードをつなぎ、下記のようなロジックを組み込ます。
TestActor_TestSubLevelのアクターの参照が取れれば「TestActor_TestSubLevelは存在する:アクター名」をデバッグ表示します。
参照が取れなければ「TestActor_TestSubLevelは存在しない」をデバッグ表示します。
image.png

ゲームをプレイします。

「TestActor_TestSubLevelは存在する:TestActor_TestSubLevel」とデバッグ表示されます。
他のレベルに配置されたActorの参照が取得できていることがわかります。
image.png

次に、TestSubLevelのSteaming Methodを「Blueprint」に変更します。
image.png

再度ゲームをプレイします。

「TestActor_TestSubLevelは存在しない」がデバッグ表示されます。Steaming Methodが「Blueprint」でロードがされていない場合は参照が取得できていないことが確認できます。
image.png

最後に、TestPersistentLevelのレベルブループリントのロジックを修正し、BeginPlayの直後にTestSubLevelのロードを行います。
image.png

再度ゲームをプレイします。

「TestActor_TestSubLevelは存在する:TestActor_TestSubLevel」とデバッグ表示されます。
Steaming Methodが「Blueprint」の場合でもSubLevelのロードが行われればActorの参照が取得できるようになっていることが確認できます。
image.png

参考文献

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?