List 관련 버그

빵어 ㅣ 2024. 2. 27. 21:22

 

플레이어와 빈 접시의 콜라이더가 충돌하면 _canCleanFood라는 리스트에 빈 접시 오브젝트를 담는다.

그리고 만약 충돌을 벗어나면 _canCleanFood에서 해당 빈 접시 오브젝트를 삭제한다.

 

하지만 어쩌선지 리스트 안에 있어야하는 빈접시 오브젝트가 없다는 오류가 떴다.

 

private void OnTriggerEnter(Collider other)
{
    if (other.gameObject.CompareTag(TagName.CookedFood))
    {
        CookedFood cookedFood = other.gameObject.GetComponent<CookedFood>();
        if (cookedFood != null)
        {
            if (cookedFood.ShouldClean && !_isTycoonGameOver)
            {
                if (!_canCleaningFoods.Contains(other.gameObject))
                {
                    _canCleaningFoods.Add(other.gameObject);
                }
            }
            else if (cookedFood.CanHold && _holdingFood == null)
            {
                _canHoldFood = other.gameObject;
            }
        }
    }
}

private void OnTriggerExit(Collider other)
{
    if (other.gameObject.CompareTag(TagName.CookedFood))
    {
        CookedFood cookedFood = other.gameObject.GetComponent<CookedFood>();
        if (cookedFood != null)
        {
            if (cookedFood.ShouldClean && _canCleaningFoods.Count > 0)
            {
                if (_canCleaningFoods.Contains(other.gameObject))
                {
                    _canCleaningFoods.Remove(other.gameObject);
                }
            }
            else if (_canHoldFood == other.gameObject)
            {
                _canHoldFood = null;
            }
        }
    }
}

 

팀원들과 이것저것 시도해봤는데,

플레이어가 빠르게 빈 접시 오브젝트를 지나가면서 OnTriggerExit안 코드가 제대로 작동되지 않아 발생하고,

다른 오브젝트의 인스펙터창을 보고 오면 리스트에 있던 오브젝트가 사라지는 것을 발견했다.

 

또 인스펙터창을 Debug로 설정했을 때만 오류가 발생하는 것을 발견했다. (빈도 수가 늘어나는 것일 수도 있다.)

 

 

일단 배포 직전에 오류가 터져서 배포를 더 이상 늦추면 안되겠다고 판단해

오류 해결을 잠시 뒤로 미뤄뒀다..

배포하니 아니나 다를까 타이쿤에서 진행이 안되는 오류가 발생했다는 설문결과가 나왔다.

'내일배움캠프(Unity)' 카테고리의 다른 글

빌드 최적화  (0) 2024.02.22
Project ID, UnityEditor  (0) 2024.02.21
Sprite Atlas  (0) 2024.02.20
Unity에서 Fog 구현  (0) 2024.02.20
TIL - Cinemachine DollyTrack, 오류 수정  (0) 2024.02.07