C++/트러블슈팅

[트러블 슈팅] UnrealEngine에서 ObjectPool을 제작했을 때

programmer-faust 2025. 8. 21. 15:16
  1. 문제 기능 : ObjectPoolManager
  2. 문제개요
    • 오류 상황: ObjectPool로 관리중인 오브젝트 사용시 오브젝트의 Mesh가 렌더링되지 않는 현상 및 Hit Event 물리기능 미작동
    • 발생 배경: 무기를 사용하여 ProjectileObject를 Get하여 사용할 때 발생
  3. 원인 분석
    • 오류 원인: Object를 관리하는 ObjectPoolManager를 Actor 또는 ActorComponent를 상속시켜 사용하면 Level 이동시 파괴되는 이유로 SubSystem을 상속시켜 사용함.
    • 구조적 이해:
      • 렌더링 문제: 렌더링은 UPrimitiveComponent가 Scene에 등록되어야 동작함 => SubSystem 내부에서 RegisterComponent()가 호출되지 않아 렌더 파이프라인에 연결되지 않음
      • Physics 문제: SubSystem은 UWorld의 물리 시뮬레이션 컨텍스트에 직접 연결되지 않아 Physics가 작동하지 않음.
      • Physics는 World에 등록된 BodyInstance 기반으로 작동함 => UPrimitiveComponent가 UWorld에 등록되지 않아 Collision과 PhysicsSimulation이 시작되지 않음
  4. 해결책
    • ObjectPoolManager가 상속받는 부모를 Actor 또는 ActorComponent로 변경
  5. 교훈 및 주의사항
    • 배운점: 보통 사용하지 않는 방식으로 기능을 구현하고 싶다면, 보통의 방식을 사용하는 이유를 잘 파악하고 구현할 것.