Settings (설정 시스템)
관련 소스 파일
•
GameFramework/Base/GameFrameworkException.cs
•
GameFramework/Setting/ISettingHelper.cs
•
GameFramework/Setting/ISettingManager.cs
•
GameFramework/Setting/SettingManager.cs
소개
Settings 시스템은 게임 세션 간에 지속적으로 유지되어야 하는 사용자 환경 설정 및 게임 설정을 관리합니다.
Configuration 시스템이 보통 사전에 정의된 데이터에서 로드되는 정적 게임 설정을 관리하는 반면, Settings 시스템은 플레이 중에 수정 가능하며 세션 간 보존되어야 하는 사용자별 설정을 다룹니다.
시스템 아키텍처
Settings 시스템은 GameFramework의 다른 모듈과 일관된 매니저-헬퍼 아키텍처 패턴을 따릅니다.
•
SettingManager
◦
설정을 관리하는 API와 기능을 제공
•
ISettingHelper 인터페이스 구현체
◦
실제 저장 및 불러오기 작업 담당 (플랫폼별로 다를 수 있음)
즉, SettingManager는 GameFrameworkModule을 상속하고 ISettingManager 인터페이스를 구현하며, 실제 저장/로드 작업은 ISettingHelper 구현체에 위임합니다.
핵심 구성 요소
SettingManager
•
중앙 관리 클래스
•
ISettingManager를 구현하고 GameFrameworkModule을 상속
•
프레임워크의 모듈 시스템을 통해 접근 가능
주요 특징:
•
헬퍼 인터페이스를 통해 설정 관리
•
다양한 데이터 타입 읽기/쓰기 메서드 제공
•
설정 존재 여부 확인 지원
•
프레임워크 종료 시 자동 저장 수행
ISettingHelper
플랫폼별로 구현해야 하는 인터페이스.
책임:
•
영구 저장소에서 설정 로드
•
영구 저장소로 설정 저장
•
메모리 내 설정 컬렉션 관리
•
데이터 타입 변환
•
객체 직렬화/역직렬화
데이터 흐름과 동작
게임 로직은 SettingManager를 통해 설정에 접근합니다.
SettingManager는 ISettingHelper 구현체에 실제 저장/불러오기 작업을 위임합니다.
지원 데이터 타입
데이터 타입 | Get 메서드 | Set 메서드 |
Boolean | GetBool(name), GetBool(name, defaultValue) | SetBool(name, value) |
Integer | GetInt(name), GetInt(name, defaultValue) | SetInt(name, value) |
Float | GetFloat(name), GetFloat(name, defaultValue) | SetFloat(name, value) |
String | GetString(name), GetString(name, defaultValue) | SetString(name, value) |
Object | GetObject(name), GetObject(name, defaultObj) … | SetObject(name, obj), SetObject(name, obj) |
※ 존재하지 않는 설정에 대비해 기본값을 지정할 수 있는 오버로드 메서드 제공.
주요 동작
초기화 및 설정
Settings 시스템을 사용하기 전 준비 단계:
1.
플랫폼에 맞는 ISettingHelper 구현체 생성
2.
SettingManager.SetSettingHelper()로 헬퍼 설정
3.
Load()를 호출하여 기존 설정 로드
읽기와 쓰기
// 읽기
bool enableMusic = settingManager.GetBool("EnableMusic", true); // 기본값 true
int volume = settingManager.GetInt("Volume", 50); // 기본값 50
float sensitivity = settingManager.GetFloat("Sensitivity"); // 없으면 예외 발생
string playerName = settingManager.GetString("PlayerName", ""); // 기본값 ""
PlayerConfig config = settingManager.GetObject<PlayerConfig>("PlayerConfig");
// 쓰기
settingManager.SetBool("EnableMusic", false);
settingManager.SetInt("Volume", 75);
settingManager.SetFloat("Sensitivity", 0.85f);
settingManager.SetString("PlayerName", "Player1");
settingManager.SetObject("PlayerConfig", playerConfig);
C#
복사
관리 기능
// 존재 여부 확인
bool hasVolume = settingManager.HasSetting("Volume");
// 특정 설정 삭제
settingManager.RemoveSetting("TemporarySetting");
// 모든 설정 삭제
settingManager.RemoveAllSettings();
// 모든 설정 이름 조회
string[] allSettings = settingManager.GetAllSettingNames();
C#
복사
설정 저장 및 로드
// 로드
bool loadSuccess = settingManager.Load();
// 저장
bool saveSuccess = settingManager.Save();
C#
복사
※ 프레임워크 종료 시 자동 저장됩니다.
구현 시 고려사항
ISettingHelper 구현 시 주의할 점:
•
저장 방식: Unity는 PlayerPrefs, 웹은 localStorage, Windows는 레지스트리/파일 등 플랫폼 적합한 방식 선택
•
데이터 직렬화: 복잡한 객체 저장 시 직렬화/역직렬화 필요
•
성능: 자주 쓰이는 설정은 빠르게 접근 가능하도록 최적화
•
에러 처리: 불러오기/저장 실패에 대비한 예외 처리
•
스레드 안정성: 멀티스레드 접근 가능 시 동기화 필요
플랫폼에 맞는 ISettingHelper를 구현해 SettingManager와 연결하면 손쉽게 확장할 수 있는 구조입니다.