Unreal Engine 4
http://uengine.ru/forum/

Создать Blueprint объект из кода по имени класса
http://uengine.ru/forum/viewtopic.php?f=19&t=4380
Страница 1 из 1

Автор:  gary_cho [ 20 янв 2017, 13:05 ]
Заголовок сообщения:  Создать Blueprint объект из кода по имени класса

В с++ создаёт актёра класс AAA. Потом мы создаём blueprint на основе класса AAA и получаем BP_AAA. Вопрос: как создать объект типа BP_AAA из кода, если только известно строковый тип класса "BP_AAA". Пробовал FindObject< UClass >(), LoadClass<UObject>(), ConstructorHelpers::FClassFinder< UObject > но все они не дают результат. Кто знает как напишите!

Автор:  Miha15z [ 23 янв 2017, 14:02 ]
Заголовок сообщения: 

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);
}

Автор:  gary_cho [ 23 янв 2017, 15:01 ]
Заголовок сообщения: 

твой вариант тоже работает, я дошёл до такого варианта

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

if( pLoadedActorClass )
{
AActor * pNewActor = pWorld->SpawnActor( pLoadedActorClass );
}

Автор:  gary_cho [ 05 апр 2017, 16:04 ]
Заголовок сообщения: 

Эти способы работаю тока в редакторе.. когда игра запаковывается в PAK то все функции возращает нули.. кто нибудь-нибудь может подсказать, как из PAK загрузить asset

Автор:  MOZGIII [ 08 апр 2017, 13:36 ]
Заголовок сообщения: 

А зачем в завязываться на фиксированный путь в коде? Сделайте переменную типа TSubclassOf<AAA> где имеет смысл (в гейммоде например, или в специальном синглтоне), и сконфигурируйте её из редактора. А ещё посмотрите https://wiki.unrealengine.com/TAssetPtr ... _TAssetPtr

Автор:  MOZGIII [ 08 апр 2017, 13:53 ]
Заголовок сообщения: 

Ещё вариант:

Код:
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;
    }
}

Автор:  gary_cho [ 09 апр 2017, 13:07 ]
Заголовок сообщения: 

это нужно для того, чтобы после закрытия игры можно восстановить все объекты на сцене, которых не было ( заспауненые ). Я нашёл решение, если кому-то нужно я напишу код!

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/