트러블 슈팅 - 직렬화로 인한 자동 객체 생성(아이템 장착한게 없는데 0값이 들어간 이유)

2024. 12. 20. 21:11카테고리 없음

문제

인벤토리 아이템을 관리하는 스크립트에서 장착한 아이템이 있으면 밑에 waponInstance와 같은 변수들에 아이템의 값을 넣어주고 장착중인 아이템이 없으면 해당 변수는 null을 갖고있게 하는 코드를 작성했는데 장착한 아이템이 없음에도 불구하고 0번이라는 값이 들어가서 오류를 발생시켰다.

위 스크립트에서 아이템이 장착중이면 장착부위에 아이템의 정보가 담긴 아이템셀을 만들어준다. 

밑에 함수가 objCell(장착중인 아이템의 정보가 담겨져있는 프리펩)을 해당 위치에 생성해준다.

오류 메세지

해결

밑에 사진을 보면 해당 데이터가 들어가 있지 않은 상태여서 null이여야 하지만 0으로 값이 들어가져있는게 보인다. 그래서 찾아본 결과

Unity Editor는 Hierarchy 창에서 게임 객체를 클릭하면 해당 객체의 데이터를 인스펙터 창에 표시하고, 직렬화된 필드를 확인하여 필요에 따라 기본값을 설정한다. 만약 필드가 null이거나 초기화되지 않으면, Unity는 해당 필드를 직렬화할 수 없으므로 자동으로 새로운 인스턴스를 생성하고 기본값을 설정한다.

위와같은 이유때문에 null이 아니라 0으로 값이 초기화되었던 거였다.

 

코드 수정

조건식을 추가해줬다.