알아두면 쓸데없는 유니티 잡학지식


Serialization(직렬화)

개념

예를 들어 메모리 여러군데에 퍼진 데이터를 저장하거나 통신하기위해 묶어서 보내야한다.

이럴 때 데이터를 묶기 위해 연속적인 데이터로 모으는 것을 직렬화한다고 한다.

 

Serialization 포멧 (데이터 교환 포멧)

XML : C# 프로젝트 파일이 XML 형태로 저장됨 (예전엔 웹용으로 많이 사용되었는데 지금은 범용적으로 사용)

YAML :씬, 프리팹, Scriptable Object 등 유니티에서 직렬화하는 데이터는 기본적으로 YAML 사용

JSON : 유니티 패키지 파일, 네트워크 통신 등에서 많이 사용

 

유니티에서 스크립트 직렬화

데이터 구조나 오브젝트 상태를 Unity 에디터가 저장하고 나중에 재구성할 수 있는 포맷으로 변환하는 프로세스

Unity 에디터에서는 저장 및 로딩, 인스펙터 창, 인스턴스화, 프리팹과 같은 기능에 직렬화가 사용됨 

 

meta file

GUID (Global Unique ID) : 에셋에 대한 고유한 ID

외부에서 파일을 참조할 때 GUID를 통해 추적하여 사용한다.

 

프리팹

게임오브젝트를 직렬화한 것

 

인스턴스화

프리팹 또는 게임 오브젝트 같이 씬에 존재하는 것에 Instaniate를 호출하면 Unity가 이 항목을 직렬화 한다.

이후 Unity는 새 게임 오브젝트를 생성해 데이터를 새 게임 오브젝트에 역직렬화 한다

 

ScriptableObject

대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너
주요 사용 사례 중 하나는 값의 사본이 생성되는 것을 방지하여 메모리 사용을 줄이는 것

이는 연결된 MonoBehaviour 스크립트에 변경되지 않는 데이터를 저장하는 프리팹이 있는 프로젝트에 유용

 

ex) 몬스터 여러마리의 maxHP, 공격력, 방어력과 같이 변경되지 않는 데이터가 복사되지 않도록 ScriptableObject로 사용

ex) 데이터 의존성 : 플레이어의 체력정보를 다양한 공간에서 사용할 때 플레이어를 직접 참조하지 않도록 필요한 정보만 

ex) 설정값 저장용 : URP 설정값 등 프로필용으로 사용

 

JSON

통신용이나 범용으로는 다른걸 사용하지만 단순히 직렬화가 목적이라면 JsonUtillity 사용을 권장

 

728x90

'Program > Unity' 카테고리의 다른 글

UGUI 최적화 (작성중)  (0) 2023.03.22
Mono & IL2CPP  (0) 2023.02.07
Unity  (0) 2022.09.19
나중에 활용  (0) 2022.08.04
Quaternion  (0) 2022.07.14

+ Recent posts