✂️

【UE5】WorldSubsystemでレベル上のアクターを取得するタイミングはInitilizeよりOnWorldBeginPlayが良い

2024/11/03に公開

概要

WorldSubsystemで現在レベルのアクターを取得したい時がありました。

そのときにInitialize関数で以下の処理を呼んでいましたが、該当の箇所まで処理が進まないことがありました。

UExampleWorldSubsystem::Initialize(FSubsystemCollectionBase& Collection)
{
    UWorld* World = GetWorld();
    for (auto Level : World->GetLevels())
    {
        for (auto Actor : Level->Actors)
        {
            //Initialize関数段階だとここにこない
            //諸々の処理(今回の主旨の説明に不要内容なので空)
        }
    }
}

こちらに関して、処理を呼ぶタイミングをOnWorldBeginPlayに移行したら取得できるようになりました。

憶測ですが、Worldクラスの初期化など諸々が終わったから取得できるようになったからだと推測してます。

UExampleWorldSubsystem::OnWorldBeginPlay(UWorld& InWorld)
{
    UWorld* World = GetWorld();
    for (auto Level : World->GetLevels())
    {
        for (auto Actor : Level->Actors)
        {
            //諸々の処理(今回の主旨の説明に不要内容なので空)
        }
    }
}

同じような悩みを持った方の助けになれば幸いです。

環境

UE5.4.4

Discussion