GameDevelop/Unity기초쌓기

Unity 트러블슈팅 – TakeDamage가 호출되지 않음

도도돋치 2025. 6. 9. 12:08
Contents 접기
728x90

문제 상황

  • PlayerAttackState에서 TakeDamage()가 호출되지 않음
  • "공격받는중" 로그가 뜨지 않음
 

 

오류 발생 원인 추론

  1. OverlapSphere 감지 자체가 안 됐을 수 있음
  2. Layer 설정이 안 돼있을 수 있음
  3. Collider를 못 찾았거나, GetComponent<Enemy>()가 null일 수 있음
  4. Cooldown 로직 문제로 아예 공격을 안 하고 있을 수 있음

 

디버깅 확인

  1. 때리는중 → 플레이어 AttackState로 진입했다.
  2. 적 감지 개수: 1  OverlapSphere로 적 1개 감지했다.
  3. Enemy 컴포넌트를 못 찾음 → GetComponent<Enemy>()가 null이다

 

원인

  1. Enemy 오브젝트에 Collider 없음
    • OverlapSphere는 Collider 기준으로 감지
    • Collider가 없으면 감지만 되고 Enemy 스크립트를 못 찾음
  2. Enemy 스크립트 위치 문제
    • Collider가 자식 오브젝트에 있고, Enemy 스크립트는 부모에만 있음
    • GetComponent<Enemy>()로는 null 반환

 

 

해결 방법

1. Enemy에 Collider 추가

  • Capsule Collider 붙이고 크기 조정
  • Layer는 반드시 Enemy로 설정

2. 부모/자식 구조 대응

Enemy enemy = hit.GetComponent<Enemy>();
if (enemy == null) enemy = hit.GetComponentInParent<Enemy>();

→ 부모까지 탐색해서 Enemy 스크립트 가져오기

 

 

728x90