본문 바로가기

[내배캠] 본 캠프 개발 학습/매일매일 쓰는 TIL

11월 6일 수요일 본 캠프 개발 일지 | 결국 못 정했조 팀 프로젝트 (2)

📌

오늘은 디버깅하면서 발생한 오류를 가볍게 정리하려고 한다.

학습 내용 

 

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 로 바꿔주게 함으로써 정상적으로 작동되었다.

 


 

 진짜 한 글자 차이로 오류 나는 경우가 너무 많은 것 같다... 우울하다...