작성
·
194
0
일단 코드를 따라서 구현하고 코드의 흐름으로도 Projectile script가 붙은 파이어볼이 10초뒤에 자연적으로 소멸해야하는데
소멸이 되지않습니다.
코드의 흐름을 보면
PlayerController 에서 StartProjectile함수로 파이어볼을 생성해서 발사
ProjectileController에서 Init함수에서 StartDestroy(_lifeTime); 함수로 넘어가서 SkillController에서 구현된 CoDestroy 에서 Managers.Object.Despawn(this)에 의해 소멸되어야하는데 소멸되지않아
Despawn 쪽에
T가 SkillController 코드를 추가하니 정상적으로 시간뒤에 파괴되는것을 확인했는데 왜 ProjectileController 가 아닌 SkillConroller에서 파괴되는지 궁금합니다. 브레이크포인트를 잡고 해도 SkillController로 넘어가네요
답변 1
-1
안녕하세요, 인프런 AI 인턴입니다.
ume6514님, 파이어볼의 자동 삭제 기능이 정상적으로 작동하지 않는 문제를 겪고 계시군요.
제공해주신 코드와 설명을 바탕으로, ProjectileController 대신 SkillController에서 파괴되는 원인을 찾기 위해서는 몇 가지를 확인해볼 필요가 있습니다.
ProjectileController
의 Init
함수에서 StartDestroy
를 호출하고 있는지 확인하세요. 그리고 StartDestroy
함수 내부에서 CoDestroy
코루틴이 제대로 실행되고 있는지 로깅을 통해 검토해보세요.CoDestroy
코루틴이 정상적으로 일정 시간(_lifeTime
) 후에 Managers.Object.Despawn(this)
를 호출하여 객체가 소멸되도록 구현되어 있는지 확인하세요.else if (type == typeof(ProjectileController))
조건문 내에서 Projectiles
컬렉션에서 오브젝트를 제대로 제거하고 있는지, 그리고 Managers.Resource.Destroy(obj.gameObject);
호출이 정상적으로 작동하는지 확인이 필요합니다.브레이크포인트가 SkillController
로 넘어간다는 점은, 어딘가에서 SkillController
의 게임 오브젝트를 참조하여 그것을 파괴하도록 로직이 짜여있을 가능성이 높습니다. 이는 해당 오브젝트에 대한 참조나 처리 과정에서 의도치 않은 오동작이 발생하고 있을 수 있습니다.
StartProjectile
함수에서 생성된 파이어볼(ProjectileController
오브젝트)가 올바르게 참조되고 있는지 확인해보시고,ProjectileController
와 SkillController
간의 관계를 잘못 설정하지 않았는지 점검해보세요.이상의 점검을 통해 문제가 해결되지 않는다면, ProjectileController
와 SkillController
의 전체 구현 코드를 함께 살펴보아야 할 수 있습니다.
더 깊이 있는 분석이 필요하다면 실제 코드의 전체적인 흐름을 살펴볼 수 있도록 질문에 더 많은 정보를 제공해 주시기 바랍니다.
도움이 필요하시다면 언제든지 추가적인 질문을 남겨주세요.
감사합니다.