Как узнать, когда редактор Unreal завершил загрузку уровняC++

Программы на C++. Форум разработчиков
Anonymous
Как узнать, когда редактор Unreal завершил загрузку уровня

Сообщение Anonymous »

Мне нужно зарегистрировать функцию с помощью IAssetRegistry.OnAssetUpdated(), когда редактор Unreal завершил загрузку уровня по умолчанию.
Я пробовал разные подходы, но Unreal имеет тенденцию запускать функции Actor несколько раз.
  • Конструктор вызывается дважды
  • OnConstruction вызывается много раз
  • PostLoad() также вызывается более одного раза.
Мне нужна функция типа «OnLoaded», которая срабатывает только один раз для вызова RegisterLinkedAssetChangeListener().
#include "ActorBase.h"

#include "UObject/SoftObjectPath.h"

#if WITH_EDITOR
#include "Editor.h"
#include "EditorUtilitySubsystem.h"
#include "EditorUtilityWidget.h"
#include "EditorUtilityWidgetBlueprint.h"
#include "AssetRegistry/AssetRegistryModule.h"
#include "AssetRegistry/IAssetRegistry.h"
#include "Editor/EditorEngine.h"
#include "UnrealEd.h"
#endif

AActorBase::AActorBase()
{
}

#if WITH_EDITOR
void AActorBase::OnConstruction(const FTransform& Transform)
{
}

// this is called more than once too
void AActorBase::PostLoad()
{
Super::PostLoad();

RegisterLinkedAssetChangeListener();
}

void AActorBase::RegisterLinkedAssetChangeListener()
{
if (!GEditor) return;

FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked("AssetRegistry");
IAssetRegistry& AssetRegistry = AssetRegistryModule.Get();

AssetRegistry.OnAssetUpdated().AddUObject(this, &AActorBase::OnLinkedAssetUpdated);
}

void AActorBase::OnLinkedAssetUpdated(const FAssetData& AssetData)
{
// ...
}
#endif


Подробнее здесь: https://stackoverflow.com/questions/798 ... ng-a-level

Вернуться в «C++»