Unreal 동적으로 생성된 액터의 스프라이트 overlap 이벤트가 발생하지 않는 문제 해결

개요

타일맵과 마찬가지로 각종 액터를 코드를 통해 동적으로 생성했습니다. 정상적으로 나타나는데 의도한 동작을 하지 않았습니다. 수동으로 추가한 같은 종류의 액터는 정상적으로 동작했습니다. 이전과 같이 뭔가 생성 타이밍의 문제가 아닐까 생각되었습니다.

문제 확인

해당 액터는 하나의 스프라이트가 추가 되어 있었습니다. 플레이어가 스프라이트와 겹치면 의도한 동작을 하도록 작업되어 있습니다. 동적으로 생성된 액터는 overlap 이벤트가 전혀 발생하지 않았습니다. 수동으로 배치한 액터에서는 로그가 정상적으로 출력되어 문제가 없었습니다.

액터에 추가된 스프라이트
액터에 추가된 스프라이트

해결

타일맵에서 Navigation Paths 가 동작하지 않는 문제와 비슷했습니다. 해당 액터의 BeginPlay 메소드에서 다음과 같이 시간 지연 후 등록해 주면 정상적으로 동작합니다.

FTimerHandle TimerHandle;
GetWorld()->GetTimerManager().SetTimer(TimerHandle, FTimerDelegate::CreateLambda([&]() {
    GetWorld()->GetTimerManager().ClearTimer(TimerHandle);

    YourSpriteComponent = GetComponentByClass<UPaperSpriteComponent>();

    if (YourSpriteComponent != nullptr) {
        YourSpriteComponent->OnComponentBeginOverlap.AddDynamic(this, &AYourClass::OnBeginOverlap);
    }
}), 0.2f, false);

이 액터와 같은 형식의 다른 액터들도 동적으로 생성했을 경우 같은 문제가 있었습니다. 다른 액터들도 위의 코드를 추가해서 정상적으로 동작하도록 했습니다.

이 문제도 결과적으로 보면 간단한데 정확하게 문제를 식별하고 적절한 처리를 추가하는데 생각보다 시간이 많이 소요되었습니다. 필자와 같은 문제를 겪으신 분들께 도움이 되었으면 합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Time limit is exhausted. Please reload the CAPTCHA.