과제를 진행하면서 위와 같이 에러가 발생하였는데, 맵이 바뀌면서 기존의 파티클이 제거되었는데도 파티클을 없애려고 하는 것이 원인이었습니다.
아래 언리얼 공식 문서를 보면 자세하게 나와있습니다.
https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-object-handling-in-unreal-engine
UParticleSystemComponent* Particle = nullptr;
GetWorld()->GetTimerManager().SetTimer(
DestroyParticleTimerHandle,
[Particle]()
{
if (Particle)
{
Particle->DestroyComponent();
}
},
2.0f,
false
);
코드를 보면 Particle은 raw 포인터로 위의 문서에서 볼 수 있듯이 가비지 컬렉터가 직접 관리하지 않아 Particle이 삭제되어도 여전히 기존 메모리를 가리킬 수 있습니다.
TWeakObjectPtr<UParticleSystemComponent> WeakParticle = nullptr;
GetWorld()->GetTimerManager().SetTimer(
DestroyParticleTimerHandle,
[WeakParticle]()
{
if (WeakParticle.IsValid())
{
WeakParticle->DestroyComponent();
}
},
2.0f,
false
);
TWeakObjectPtr은 객체가 삭제되면 자동으로 nullptr로 변환되어 삭제된 객체를 참조하는 실수를 방지할 수 있습니다. 그러므로 위와 같이 코드를 수정하여 WeakParticle.IsValid()를 사용해 객체가 유효한 경우에만 DestroyComponent()를 실행하도록 변경하였습니다.
'내일배움캠프 > TIL' 카테고리의 다른 글
[내일배움캠프 Day41] 언리얼 AI 구현 (2) | 2025.02.17 |
---|---|
[내일배움캠프 Day38] 8주차 과제 진행 (0) | 2025.02.12 |
[내일배움캠프 Day35] 알고리즘 수업 1주차 과제 (3) | 2025.02.07 |
[내일배움캠프 Day34] push_back과 emplace_back의 차이점 (2) | 2025.02.06 |
[내일배움캠프 Day32] 가상 함수 동작 원리 (0) | 2025.02.04 |