• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

FindChild() 함수 이용 중 오류

23.09.14 17:02 작성 조회수 220

0

Util 스크립트에서 만든 FindChild() 함수를 UI 오브젝트가 아닌 다른 오브젝트에서도 사용하고 싶어 사용하던 중 문제가 발생하여 질문이 있습니다.

FindChild() 함수의 리턴 값이 null이 되면 이후의 코드들이 실행이 안되던데 이유를 모르겠습니다.

void OnEnable()
{
    partToRotate = Util.FindChild(gameObject, "PartToRotate", true).transform;
    firePoint = Util.FindChild(gameObject, "FirePoint", true).transform;
    
    // 이후의 코드들

}

위의 partToRotate와 firePoint 변수는 OnEnable() 함수에서는 사용되는 일이 없고 Update() 함수에서 사용됩니다. Update 함수에서 변수 값이 null로 인해 오류가 나는 거면 이해를 하겠는데, OnEnable() 함수에서 FindChild() 함수의 리턴 값이 null이 되면 왜 이후의 코드들이 실행이 안되는지 모르겠습니다.

널 조건 연산자인 ?로 해결은 했으나, 왜 안되는지 이유가 궁금합니다.

답변 1

답변을 작성해보세요.

0

디버깅을 해보세요. Util.FindChild에 breakpoint를 걸고
F11으로 하나 하나 들어가서 어디서 null 리턴하는지 확인해보세요.
사람들이 디버깅을 못하는 상태로 개발을 하려 하는데
그러면 버그 하나라도 났을 때 더 이상 진행을 못하는 상황이 됩니다.

그리고 위에 말씀주신 문제의 상황은 .transform을 사용하기 때문에,
없는 객체의 멤버 변수를 사용해서 그런 것으로 보이네요!
널 조건자? 은 객체가 null인 경우 .transform이 사실상 null로 바뀌어서 문제가 없는 것입니다.
결국 객체.transform에서 객체가 null이면 바로 크래시가 나는 것이죠.