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/ |