using UnityEngine; using UVC.Core; namespace Sample { /// /// Type D 예시: 순수 C# Singleton - 게임 설정 관리자 /// /// /// [ 타입 ] Type D - 순수 C# Singleton (Singleton 상속) /// [ 라이프사이클 ] App - 애플리케이션 전체 유지 /// /// [ 특징 ] /// /// MonoBehaviour가 아니므로 GameObject/씬에 배치 불필요 /// Lazy 초기화: 첫 Instance 접근 시 자동 생성 /// 스레드 안전한 싱글톤 패턴 /// Injector와 기존 Instance 접근 방식 모두 지원 /// /// /// [ 등록 방법 ] /// Injector.RegisterSingleton(); /// /// [ 사용 방법 ] /// /// // 방법 1: [Inject] 어트리뷰트 사용 /// [Inject] private InjectorSampleSettingsManager _settings; /// _settings.MasterVolume = 0.5f; /// /// // 방법 2: 직접 Instance 접근 (기존 Singleton 방식) /// InjectorSampleSettingsManager.Instance.MasterVolume = 0.5f; /// /// // 두 방식 모두 동일한 인스턴스를 반환 /// /// /// [ 주의사항 ] /// /// Unity Inspector에서 설정 불가 (MonoBehaviour 아님) /// 씬에 배치하면 컴파일 에러 발생 /// PlayerPrefs 등을 통한 영속화는 별도 구현 필요 /// /// public class InjectorSampleSettingsManager : Singleton { /// 마스터 볼륨 (0.0 ~ 1.0) public float MasterVolume { get; set; } = 1.0f; /// 효과음 볼륨 (0.0 ~ 1.0) public float SFXVolume { get; set; } = 1.0f; /// 배경음악 볼륨 (0.0 ~ 1.0) public float BGMVolume { get; set; } = 0.8f; /// 언어 설정 (ko, en, jp 등) public string Language { get; set; } = "ko"; /// /// 설정을 저장합니다. /// 실제 구현에서는 PlayerPrefs나 파일 시스템에 저장합니다. /// public void Save() { // 실제 구현 예시: // PlayerPrefs.SetFloat("MasterVolume", MasterVolume); // PlayerPrefs.SetString("Language", Language); // PlayerPrefs.Save(); Debug.Log("[InjectorSampleSettingsManager] Settings saved"); } /// /// 설정을 불러옵니다. /// 실제 구현에서는 PlayerPrefs나 파일 시스템에서 로드합니다. /// public void Load() { // 실제 구현 예시: // MasterVolume = PlayerPrefs.GetFloat("MasterVolume", 1.0f); // Language = PlayerPrefs.GetString("Language", "ko"); Debug.Log("[InjectorSampleSettingsManager] Settings loaded"); } } }