오늘은 캐릭터와 관련된 정보들을 어떻게 효율적으로 사용할지 고민했다.
그리하여 나온 결론은 클래스를 따로 만들어서 캐릭터터와 관련된 데이터를 선언해 놓을
클래스를 하나 제작하기로 했다. 하지만 여기서 문제가 발생했다. 다른 cs파일에서 사용을 하려고 했지만
사용이 불가능했다. 그 이유는 직렬화를 안했기 때문이다. 그래서 오늘은 직렬화의 개념을 파악하려고 한다.
"직렬화" 란?
데이터 구조나 오브젝트 상태를 Unity 에디터가 저장하고 나중에 재구성할 수 있는 포멧으로 자동 변환해주는 프로세스를 말한다. 여기서 변환과정은 오브젝트를 연속된 바이트로 변환해주는 과정을 말한다.
요약하자면 객체(데이터)의 정보를 지속적으로 보존하고 사용하기 위해 일련의 변환과정을 거친다는 것이다.
사용법
이 사진은 오늘 내가 사용한 클래스의 일부분이다. 직렬화를 사용하기 위해선
"[Serializable]" 이란 코드를 사용해야한다. 만약 사용하지 않았다면 클래스안에 있는 내용을
다른 파일에서 접근할 수 없다.
직렬화 규칙
- public 이나 SerializeField 속성 포함
- static, const, readonly가 아니어야 한다.
- 직렬화할 수 있는 fieldtype이 있어야 한다.
fieldtype으로는 Serializable 속성을 가지고 있는 비추상, 비일반 커스텀 클래스나 구조체, 기본 데이터 형식(int, float...), 열거형, 특정 유니티 내장 타입(Vector2, Vector3, Vector4, Rect, Quaternion, Matrix4x4, Color, Color32, LayerMask, AnimationCurve, Gradient, RectOffset, GUIStyle)
위에서 내가 사용한 코드를 보면 public 속성, 기본 데이터 형식(int), 커스텀클래스 등 모든 조건을 만족할 수 있었기 때문에 직렬화가 가능하다.
이렇게 직렬화에 대해 알아보았다. 이 개념을 공부하기전 까지는 그냥 Serializable만 적으면 다 되는거 아닌가? 라고 생각했지만 많은 조건이 있었다. 다음에 이 기능을 다시 사용할 때 오류가 나도 무슨 이유때문에 오류가 나는지, 어떻게 해결해야 하는지 확실히 알수 있을 것같다.
'TIL > Unity' 카테고리의 다른 글
[Unity] 인벤토리 UI를 쉽게 만들어주는 Grid Layout (0) | 2023.09.21 |
---|---|
[Unity] 부모의 Awake, Start, Update 호출하기 (override) (0) | 2023.09.19 |
Unity 지연함수 Invoke, Coroutine 의 차이점 (0) | 2023.09.15 |
Unity 효율적인 데이터 관리 (ScriptableObject) (0) | 2023.09.14 |
Unity 물체 감지 기능(LayerMask, RaycastHit) (0) | 2023.09.13 |