Unreal Paper2D: динамическая установка спрайтов в Sprite Actors на C++C++

Программы на C++. Форум разработчиков
Anonymous
Unreal Paper2D: динамическая установка спрайтов в Sprite Actors на C++

Сообщение Anonymous »

У меня есть несколько ресурсов, которые я импортировал для различных «предметов» в моей игре. Я преобразовал каждый ресурс в спрайт.
В C++ я создал подкласс класса ASLBaseSpriteActor от APaperSpriteActor, чтобы я мог динамически создавать различные «элементы» в мире.
Я пытаюсь динамически настроить, какой конкретный спрайт следует использовать для нового порожденного ASLBaseSpriteActor.
Если я помещу это в конструктор:

Код: Выделить всё

ASLBaseSpriteActor::ASLBaseSpriteActor() {
UE_LOG(LogTemp, Warning, TEXT("ASLBaseSpriteActor::constructor"));
UPaperSprite* sprite = Cast(StaticLoadObject(UPaperSprite::StaticClass(), NULL, TEXT("/Script/Paper2D.PaperSprite'/Game/Assets/Items/apple_Sprite.apple_Sprite'")));
UE_LOG(LogTemp, Warning, TEXT("ASLBaseSpriteActor::Initialize2"));
if (sprite) {
UE_LOG(LogTemp, Warning, TEXT("ASLBaseSpriteActor::Initialize got sptire"));
UPaperSpriteComponent* renderComponent = this->GetRenderComponent();
if (renderComponent) {
this->GetRenderComponent()->SetSprite(sprite);
UE_LOG(LogTemp, Warning, TEXT("ASLBaseSpriteActor::Initialize got render comp"));
}
}
}
Это работает нормально — я вижу элемент «яблоко» в мире после создания APaperSpriteActor. Проблема в том, что в конечном итоге путь к спрайту должен будет стать параметром. Но если я помещу тот же блок кода, скажем, в BeginPlay, я больше не смогу видеть этот элемент в мире, хотя, судя по моим журналам, все ссылки на спрайт и renderComponent не являются нулевыми.
Я тоже пробовал отложенный спавн - в игровом режиме делаю:

Код: Выделить всё

void ASLGameModeBase::BeginPlay() {
UWorld* const World = GetWorld();
if (World) {
const FTransform SpawnLocAndRotation;
ASLBaseSpriteActor* newItem = World->SpawnActorDeferred(ASLBaseSpriteActor::StaticClass(), SpawnLocAndRotation);
newItem->Initialize();
newItem->FinishSpawning(SpawnLocAndRotation);
}
}
Я пытался поместить код из APaperSpriteActor в APaperSpriteActor::Initialize, но это тоже не работает.
У меня нет идей, помимо создания подкласса APaperSpriteActor для каждого из моих элементов, чтобы просто установить путь к спрайту в конструкторе. Как я могу добиться того, чего хочу, с помощью всего лишь одного класса APaperSpriteActor, который может динамически прикреплять спрайт к своему экземпляру при его создании в мире на основе параметра пути?

Подробнее здесь: https://stackoverflow.com/questions/786 ... cally-in-c

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