📌 개요
Unity 에디터에서 툴을 개발할 때 데이터를 영구적으로 저장할 필요가 있습니다. A 개발자와 B 개발자가 해당 툴의 세팅을 서로 다르게 가져갈 수 있기 때문입니다.
예를 들어, Unity에서 제공하는 기본 레이아웃이 여기에 해당합니다. 개발자는 자신이 원하는 레이아웃을 선택할 수 있으며, Unity를 껐다 키면 그 상태를 유지합니다. 왜냐하면 레이아웃 데이터가 PC 로컬 환경에 저장되기 때문입니다.
레이아웃 데이터는 사용자 환경에 따라 위 경로(~/Preferences) 폴더에 저장됩니다. 이건 프로젝트 상위 폴더가 아닌, PC 로컬 환경에 저장되기 때문에 버전 관리에 포함되지 않습니다. 따라서 PC마다 사용자만의 에디터 환경을 구축할 수 있습니다.
오늘은 커스텀 에디터 또는 툴을 제작하면서 데이터를 어떻게 저장할 수 있는지데 대해 살펴보겠습니다.
📌 데이터 저장 및 로드
위 구성은 데이터를 쓰거나 읽기 위해 사용되는 가장 기본적인 구성입니다. 차근차근 하나씩 분석해보도록 합시다.
FilePath : 파일 위치를 지정하는 속성
FilePath은 Unity 에디터 환경에서 데이터를 저장하고 로드하는 기능을 위해 사용됩니다. 데이터가 파일로서 저장되기 위한 경로를 지정합니다.
FilePath 위치
- PreferrencesFolder : 환경 설정과 관련된 파일을 저장하는 위치입니다. 주로 사용자별 데이터 관리에 용이합니다. (C:\Users\{사용자 이름}\AppData\Roaming\Unity\Editor-5.x\Preferences)
- ProjectFolder : 프로젝트 폴더와 관련된 파일을 저장하는 위치입니다. 프로젝트별 데이터 관리에 용이합니다. (프로젝트 최상위 폴더)
ScriptableSingleton<T> : 에디터 상태를 저장하기 위한 기본 클래스
FilePath는 ScriptableSingleton과 자주 사용됩니다. ScriptableObject를 기반으로 싱글톤 패턴으로 구현되었으며, 데이터를 영구적으로 저장할 때 유용합니다.
데이터 저장 : Save 메서드 호출 시
데이터 로드 : Instance 최초 참조 시
간단한 로직을 만들어서 데이터를 저장해봅시다. ScriptableSingleton 내부에 정의된 instance.Save 메서드를 사용하여 데이터를 저장할 수 있습니다.
※ InitailizeOnLoad 속성 : 에디터 컴파일 시 정적 생성자를 실행
YAML 언어로 직렬화된 것을 확인할 수 있습니다. 이번에는 데이터 로드를 살펴보도록 하겠습니다.
데이터 로드는 Instance을 최초 참조할 때 알아서 처리해줍니다. 매우 간단하죠?
자세한 정보는 아래 공식 문서를 참고해주세요.
[ Unity 공식 문서 : FilePath 속성 ]
Unity - Scripting API: FilePathAttribute
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see: You've told us there are code samples on this page which don't work. If you know ho
docs.unity3d.com
[ Unity 공식 문서 : ScriptableSingleton<T> ]
Unity - Scripting API: ScriptableSingleton<T0>
The ScriptableSingleton generic class allows you to create 'Manager' type classes in the Unity Editor. In classes that derive from ScriptableSingleton, serializable data you add survives assembly reloading in the Editor. Also, if the class uses the FilePat
docs.unity3d.com
'유니티(Unity) > 커스텀 에디터' 카테고리의 다른 글
[EditorWindow] 기본적인 에디터 창 구축 (0) | 2025.01.22 |
---|---|
[EditorUtility.DisplayDialog] 팝업 창 제작 (0) | 2025.01.19 |
[Unity 기능] 커스텀 패키지 제작하기 (1) | 2024.12.20 |