[내배캠] 본 캠프 개발 학습/매일매일 쓰는 TIL
11월 6일 수요일 본 캠프 개발 일지 | 결국 못 정했조 팀 프로젝트 (2)
Lv.0 코린이
2024. 11. 6. 22:36
📌
오늘은 디버깅하면서 발생한 오류를 가볍게 정리하려고 한다.
학습 내용
1. GetComponent를 찾을 수 없는 오류
2. Attack 함수가 무한으로 호출되는 오류
1. GetComponent를 찾을 수 없는 오류
저번에 베이직 반에서 겪었던 오류랑 맥락이 똑같았다.
초기화 될 때 아직 오브젝트가 생성되지 않았는데 자식 컴포넌트를 찾게 되면서 발생한 오류!
Awake에 있던 GetComponentInChildren 코드를 Start로 옮겨주면서 해결되었다.
2. Attack 함수가 무한으로 호출되는 오류
public override void Attack()
{
Debug.Log("공격했다!");
if (_attackCoroutine == null)
{
// 실행
_attackCoroutine = StartCoroutine(AttackRoutine());
}
} // 공격
private IEnumerator AttackRoutine() // 공격 시작
{
var playerCondition = PlayerManager.Instance.Player.GetComponent<IDamagable>();
if (playerCondition != null)
playerCondition.TakeDamage(_monster.AttackPower);
yield return new WaitForSeconds(_monster.AttackSpeed);
_attackCoroutine = null;
}
수정 이전에는 _attackCoroutine이 null이 아니면 코루틴을 정지하고 다음 코루틴을 실행하도록 했다.
이렇게 될 경우 AttackRoytine 의 스피드 만큼 공격이 멈춰있을 때 기다리지 않고 다음 프레임에서 현재 코루틴을 정지하고 다음 코루틴을 실행하게 되면서 매 프레임마다 코루틴이 동작하게 되는 버그가 발생한 것!
코루틴이 null 일 때 코루틴을 실행하고 코루틴을 한 번 실행하면 다시 null 로 바꿔주게 함으로써 정상적으로 작동되었다.
진짜 한 글자 차이로 오류 나는 경우가 너무 많은 것 같다... 우울하다...