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