설정 시스템 (Configuration System)
관련 소스 파일
•
Scripts/Runtime/Config/ConfigComponent.cs
•
Scripts/Runtime/Config/ConfigHelperBase.cs
•
Scripts/Runtime/Config/DefaultConfigHelper.cs
•
Scripts/Runtime/DataTable/DataRowBase.cs
•
Scripts/Runtime/DataTable/DataTableComponent.cs
•
Scripts/Runtime/DataTable/DataTableHelperBase.cs
•
Scripts/Runtime/DataTable/DefaultDataTableHelper.cs
•
Scripts/Runtime/Localization/DefaultLocalizationHelper.cs
•
Scripts/Runtime/Localization/LocalizationComponent.cs
•
Scripts/Runtime/Localization/LocalizationHelperBase.cs
•
Scripts/Runtime/Setting/DefaultSetting.cs
•
Scripts/Runtime/Setting/DefaultSettingHelper.cs
•
Scripts/Runtime/Setting/PlayerPrefsSettingHelper.cs
•
Scripts/Runtime/Setting/PlayerPrefsSettingHelper.cs.meta
•
Scripts/Runtime/Setting/SettingComponent.cs
•
Scripts/Runtime/Setting/SettingHelperBase.cs
개요
Unity Game Framework의 설정 시스템은 게임 전역 설정과 플레이어의 지속적 설정을 관리하기 위한 메커니즘을 제공합니다.
이 시스템은 두 가지 주요 컴포넌트로 구성됩니다:
1.
Config 컴포넌트 – 게임 전역 읽기 전용 설정 관리
2.
Setting 컴포넌트 – 플레이어별 읽기/쓰기 가능한 지속적 설정 관리
두 가지 목적
1.
글로벌 설정 (Config)
•
외부 설정 파일에서 읽어온 전역 설정 값 제공
•
런타임에서는 읽기 전용
•
게임 상수, 기본값, 정적 데이터 관리에 사용
1.
지속적 설정 (Setting)
•
게임 플레이 중 변경 가능한 설정을 관리
•
세션 간 저장/유지 (예: 오디오 볼륨, 그래픽 옵션, 플레이어 이름 등)
구조화된 게임 데이터를 관리하려면 Data Tables 시스템을 참고하세요.
Config Component
•
게임 전역 설정 데이터를 제공
•
보통 외부 파일에서 불러오며 런타임에서는 읽기 전용
설정 파일 포맷 (기본)
•
DefaultConfigHelper는 탭으로 구분된 텍스트 형식을 사용
# 주석
ID Name Type Value
Plain Text
복사
•
실제 게임에서 사용하는 값은 Name과 Value 컬럼에서 가져옴
로딩 예시
// 설정 파일 로드
GameEntry.Config.ReadData("GameConfig");
// 값 가져오기 (기본값 제공 가능)
bool soundEnabled = GameEntry.Config.GetBool("SoundEnabled", true);
int maxPlayers = GameEntry.Config.GetInt("MaxPlayers", 4);
float gravity = GameEntry.Config.GetFloat("Gravity", 9.8f);
string welcomeMessage = GameEntry.Config.GetString("WelcomeMessage", "Hello World!");
C#
복사
Setting Component
•
지속적 게임 설정을 관리
•
플레이어의 기기나 환경에 맞게 저장됨
•
게임 세션 간 유지됨
저장 방식
1.
DefaultSettingHelper
•
GameFrameworkSetting.dat (바이너리 파일)
•
앱의 persistentDataPath에 저장
2.
PlayerPrefsSettingHelper
•
Unity의 PlayerPrefs 사용
•
플랫폼 의존적이지만 Unity 개발자에게 익숙함
사용 예시
// 값 읽기 (없으면 기본값 사용)
bool musicEnabled = GameEntry.Setting.GetBool("MusicEnabled", true);
int volumeLevel = GameEntry.Setting.GetInt("VolumeLevel", 7);
float brightness = GameEntry.Setting.GetFloat("Brightness", 0.8f);
string playerName = GameEntry.Setting.GetString("PlayerName", "Player");
// 값 저장
GameEntry.Setting.SetBool("MusicEnabled", false);
GameEntry.Setting.SetInt("VolumeLevel", 5);
GameEntry.Setting.SetFloat("Brightness", 0.7f);
GameEntry.Setting.SetString("PlayerName", "NewPlayer");
// 커스텀 객체 저장/로드
PlayerData playerData = new PlayerData();
GameEntry.Setting.SetObject("PlayerData", playerData);
PlayerData savedData = GameEntry.Setting.GetObject<PlayerData>("PlayerData");
// 디스크에 저장
GameEntry.Setting.Save();
C#
복사
헬퍼 패턴 & 커스터마이징
Config, Setting 모두 Helper 패턴을 사용해 로직을 커스터마이징할 수 있음.
커스텀 Config Helper 작성
•
ConfigHelperBase 상속
•
데이터 읽기/파싱 로직 구현
•
ConfigComponent에 할당
커스텀 Setting Helper 작성
•
SettingHelperBase 상속
•
데이터 로드/저장/관리 로직 구현
•
SettingComponent에 할당
Config vs Setting 비교
특징 | Config System | Setting System |
목적 | 전역, 읽기 전용 설정 | 사용자 환경 설정 |
저장소 | 외부 설정 파일 | 바이너리 파일 / PlayerPrefs |
접근 | 읽기 전용 | 읽기/쓰기 가능 |
대표 사용 예 | 게임 상수, 기본값 | 볼륨, 그래픽 옵션, 플레이어 이름 |
로딩 | 리소스에서 불러옴 | 퍼시스턴트 스토리지에서 불러옴 |
저장 | 없음 (읽기 전용) | 언제든 저장 가능 |
데이터 타입 | Bool, Int, Float, String | Bool, Int, Float, String, 객체(JSON 직렬화) |
다른 시스템과의 통합
•
리소스 시스템 – Config 파일 로드
•
이벤트 시스템 – 설정 로드/실패 이벤트 발생
•
직렬화 – Setting은 바이너리 또는 JSON 직렬화 사용
베스트 프랙티스
•
Config vs Setting 역할 구분
◦
전역 상수/기본값 → Config
◦
사용자 설정 → Setting
•
초기화 순서
◦
다른 시스템보다 먼저 Config 로드
•
기본값 제공
◦
값이 없을 경우 대비하여 항상 기본값 인자 제공
•
저장 시점
◦
중요한 변경 이후 Save() 호출 (레벨 완료, 앱 일시정지 등)
•
커스텀 객체 저장 시
◦
반드시 직렬화 가능해야 하며 에러 처리 필요
•
Config = 읽기 전용, 전역 설정 (상수, 게임 기본값)
•
Setting = 플레이어 환경설정 (볼륨, 옵션), 저장 가능
혹시 제가 이 문서를 표 형식으로 정리해서 위키 문서처럼 깔끔하게 정리해드릴까요?