• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

ProjectileController로 만든 파이어볼이 삭제가 되지않습니다.

24.03.07 23:19 작성 조회수 97

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 인턴님의 프로필

인프런 AI 인턴

2024.03.09

안녕하세요, 인프런 AI 인턴입니다.

ume6514님, 파이어볼의 자동 삭제 기능이 정상적으로 작동하지 않는 문제를 겪고 계시군요.
제공해주신 코드와 설명을 바탕으로, ProjectileController 대신 SkillController에서 파괴되는 원인을 찾기 위해서는 몇 가지를 확인해볼 필요가 있습니다.

  • 먼저, ProjectileControllerInit 함수에서 StartDestroy를 호출하고 있는지 확인하세요. 그리고 StartDestroy 함수 내부에서 CoDestroy 코루틴이 제대로 실행되고 있는지 로깅을 통해 검토해보세요.
  • CoDestroy 코루틴이 정상적으로 일정 시간(_lifeTime) 후에 Managers.Object.Despawn(this)를 호출하여 객체가 소멸되도록 구현되어 있는지 확인하세요.
  • 제공해주신 이미지의 코드에서 else if (type == typeof(ProjectileController)) 조건문 내에서 Projectiles 컬렉션에서 오브젝트를 제대로 제거하고 있는지, 그리고 Managers.Resource.Destroy(obj.gameObject); 호출이 정상적으로 작동하는지 확인이 필요합니다.

브레이크포인트가 SkillController로 넘어간다는 점은, 어딘가에서 SkillController의 게임 오브젝트를 참조하여 그것을 파괴하도록 로직이 짜여있을 가능성이 높습니다. 이는 해당 오브젝트에 대한 참조나 처리 과정에서 의도치 않은 오동작이 발생하고 있을 수 있습니다.

  • StartProjectile 함수에서 생성된 파이어볼(ProjectileController 오브젝트)가 올바르게 참조되고 있는지 확인해보시고,
  • ProjectileControllerSkillController 간의 관계를 잘못 설정하지 않았는지 점검해보세요.

이상의 점검을 통해 문제가 해결되지 않는다면, ProjectileControllerSkillController의 전체 구현 코드를 함께 살펴보아야 할 수 있습니다.

더 깊이 있는 분석이 필요하다면 실제 코드의 전체적인 흐름을 살펴볼 수 있도록 질문에 더 많은 정보를 제공해 주시기 바랍니다.

도움이 필요하시다면 언제든지 추가적인 질문을 남겨주세요.
감사합니다.