Полезное

Мы Вконтакте

Discord канал

#
Аватара пользователя
Пользователь
Сообщения: 195
В с++ создаёт актёра класс AAA. Потом мы создаём blueprint на основе класса AAA и получаем BP_AAA. Вопрос: как создать объект типа BP_AAA из кода, если только известно строковый тип класса "BP_AAA". Пробовал FindObject< UClass >(), LoadClass<UObject>(), ConstructorHelpers::FClassFinder< UObject > но все они не дают результат. Кто знает как напишите!
Аватара пользователя
Пользователь
Сообщения: 261
FString FullPath = Path + actorName + "." + actorName;
UBlueprint* DLBlueprint = LoadObject<UBlueprint>(NULL, *FullPath);
if (DLBlueprint)
{
UClass* BPClass = (UClass*)DLBlueprint->GeneratedClass;
auto NewBP = GWorld->SpawnActor(BPClass);
NewBP->SetActorLocation(Location);
NewBP->SetActorRotation(FRotator(0.0, 180.0, 0));
NewBP->SetActorLabel(actorName);
}
Аватара пользователя
Пользователь
Сообщения: 195
твой вариант тоже работает, я дошёл до такого варианта

const FString srFullPath = TEXT( "/Game/Objects/" ) + srActorName + "." + srActorName + "_C";
UClass * pLoadedActorClass = FindObject< UClass >( ANY_PACKAGE, *srFullPath );

if( pLoadedActorClass )
{
AActor * pNewActor = pWorld->SpawnActor( pLoadedActorClass );
}
Аватара пользователя
Пользователь
Сообщения: 195
Эти способы работаю тока в редакторе.. когда игра запаковывается в PAK то все функции возращает нули.. кто нибудь-нибудь может подсказать, как из PAK загрузить asset
Аватара пользователя
Тех. администратор
Сообщения: 367
А зачем в завязываться на фиксированный путь в коде? Сделайте переменную типа TSubclassOf<AAA> где имеет смысл (в гейммоде например, или в специальном синглтоне), и сконфигурируйте её из редактора. А ещё посмотрите https://wiki.unrealengine.com/TAssetPtr ... _TAssetPtr
Аватара пользователя
Тех. администратор
Сообщения: 367
Ещё вариант:

Код:
APylon::APylon(const class FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
    // Structure to hold one-time initialization
    static FClassFinder<UNavigationMeshBase> ClassFinder(TEXT("class'Engine.NavigationMeshBase'"));
    if (ClassFinder.Succeeded())
    {
        NavMeshClass = ClassFinder.Class;
    }
    else
    {
        NavMeshClass = nullptr;
    }
}
Аватара пользователя
Пользователь
Сообщения: 195
это нужно для того, чтобы после закрытия игры можно восстановить все объекты на сцене, которых не было ( заспауненые ). Я нашёл решение, если кому-то нужно я напишу код!


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница