Company
교육 철학

설정 시스템 (Configuration System)

설정 시스템 (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
복사
실제 게임에서 사용하는 값은 NameValue 컬럼에서 가져옴

로딩 예시

// 설정 파일 로드 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 = 플레이어 환경설정 (볼륨, 옵션), 저장 가능
혹시 제가 이 문서를 표 형식으로 정리해서 위키 문서처럼 깔끔하게 정리해드릴까요?