배운거 잊지 않도록 하는 메모 겸 튜토리얼성 정보예요.


본인도 막 배운 정보니까 틀린 점 있으면 댓글 부탁.




1. 직렬화란?


데이터를 읽고 쓰기 편하게 정해진 형식으로 나타낸 것.


저장 시스템과 번역 시스템에서 자주 쓰는 JSON, CSV도 직렬화 형식 중 하나이다.




2. 유니티의 직렬화


유니티 또한 오브젝트의 상태를 저장하기 위해 자체적인 직렬화 형식이 있다.


프리팹 파일을 메모장으로 열어보면 간단하게 확인이 가능하다.


a15714ab041eb360be3335625683746f0153452ad6a6e889d63066f89c11cd6e1fc32d71f0e4263e8d113e09da


+ 프리팹의 직렬화 된 Transform 정보


유니티는 기본적으로 이 직렬화된 데이터를 읽고 인스펙터에 표시하는 방법으로 동작하며, 인스펙터에서 수정된 사항은 직렬화되어 파일에 저장된다.




3. [SerializeField]


[SerializeField] 는 필드를 직렬화하여 인스펙터에 표시될 수 있도록 해준다.


public 또한 자동으로 직렬화가 된다.


a15714ab041eb360be3335625683746f0153452ad6a6e889d63066f79f16cd6ea81a1a75be248f653334404b01


a15714ab041eb360be3335625683746f0153452ad6a6e889d63061f69f14cd6e6d243636a5d34d865dea5a9e96


+ public과 [SerializeField]가 붙은 필드만 파일에 직렬화되어 저장된 모습


직렬화되지 않은 필드는 유니티 인스펙터상에 표시되지 않으며 상태가 저장되지 않고 초기화된다.




4. 주의해야 할 점


직렬화되지 않은 필드를 가진 오브젝트를 복제해보자.


a15714ab041eb360be3335625683746f0153452ad6a6e889d63363f89e15cd6e6203a55108f99b594967288b5c


ObjectScript는 private moveSpeed 필드와 그것을 변경하는 함수, moveSpeed를 로그로 띄워주는 함수로 구성되어있다.



a15714ab041eb360be3335625683746f0153452ad6a6e889d63361f09c12cd6e193d6dcf0d762104ea6b7d61dc


Test 스크립트에서 원본 오브젝트의 moveSpeed를 변경한 후, 복제 오브젝트를 만들고 둘의 moveSpeed값을 띄워보면



a15714ab041eb360be3335625683746f0153452ad6a6e889d63363f89911cd6ec84f2076a666c92401e1249c87


위와 같이 직렬화되지 않은 필드는 초기화가 되어있는 것을 확인할 수 있다.


직렬화되지 않은 필드는 저장은 물론 복제도 되지 않는 점에 유의하자.