Work, Study/Unity

직렬화, 프로퍼티와 필드

Waltwaez 2024. 7. 29. 17:38

1. 직렬화의 의미

  • 객체의 상태를 저장하거나, 전송할 수 있는 상태로 변환하는 프로세스.
  • Unity에서는 이를 사용해서 프리팹, 에셋, 씬 등의 데이터를 저장한다.

 

1.1. 프로퍼티와 필드

  • 필드 : 클래스의 변수. 데이터를 직접 저장한다.
  • 프로퍼티 : 메서드처럼 동작하는 멤버. get, set 접근자로 필드에 접근한다.

 

1.2. Unity의 직렬화 규칙

  • Public 필드 : 자동 직렬화
  • private 필드 : [SerializeField] 속성을 붙여야 직렬화된다.
  • 프로퍼티 는 직렬화되지 않는다.
    • 프로퍼티는 메서드이다. get, set 은 코드 블럭을 가질 수 있기 때문에, 단순한 데이터 저장 이상의 로직을 가질 수 있다.
    • 직렬화는 데이터 저장이 목적이다. 로직을 포함하는 프로퍼티는 저장 대상이 아니다.

 

1.3. 왜 이걸 정리했는가?

  • 프리팹으로 맵을 저장하고 다시 불러올 때, 에디터 그리드에 타일의 정보가 정상적으로 표시되지 않는 이슈가 있었다.
  • 자세히 살펴보니 모든 타일이 자신의 위치를 (0, 0) 으로 갖고 있었다. 하지만 저장하기 전에는 분명 각 타일이 자신의 정보를 올바르게 갖고 있었다.
  • 결과적으로 Tile.cs 에서 GridPostion 이라는 프로퍼티로만 저장하던 게 문제였다. gridPosition 이라는 필드를 추가해서 해결.