본문 바로가기
Unreal/Solution

Unreal Spawn Actor시 Owner을 설정합시다.

by Dev_카페인 2024. 1. 7.
반응형

[Unreal/C++] Spawn Actor시 Owner을 설정합시다.

 

언리얼에서 무기를 Spawn 시키고 충돌 처리를 하던 중 Fatal Error를 만났다.

 

무기에 BoxCollision을 붙이고 PrimitiveComponent에서 받아온 OnComponentBeginOverlap 이벤트를 성공적으로 설정하였다.

void Actor::OnComponentBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)

 

UGameplayStatics에 있는 ApplyDamage를 이용해 데미지를 전달하는 것 까지는 문제가 없었지만,

데미지를 받는 쪽에서 공격한 대상을 찾던 도중 문제가 발생했다.

UGameplayStatics::ApplyDamage(OtherActor, 5, GetOwner()-GetInstigatorController(), this, DamageType::StaticClass());

 

Spawn한 무기의 소유주가 nullptr이었던 것이다.

Controller->GetPawn() 을 이용해 적을 추적하려 했지만 nullptr을 만나 엔진 에디터가 꺼졌다.

 

소유주가 없으니 Enemy쪽에서 Spawn 후 SetOwner로 설정해 주었다.

기능은 정상적으로 작동하게 되었지만 아직 간과한 문제가 있다.

Spawn이 완료되고 Owner이 설정되기 전에 충돌이 일어날 수 있는 것이었다.

 

이제 남은 작업은 SpawnActor에서 SpawnActorDeferred로 바꾸는 것이다.

Deferred는 생성 전 모든 변경사항을 적용할 수 있다.

반응형