using UnityEngine; using UVC.Core; namespace Sample { /// /// Type D 예시: MonoBehaviour SingletonApp - 네트워크 관리자 /// /// /// [ 타입 ] Type D - MonoBehaviour SingletonApp (SingletonApp<T> 상속) /// [ 라이프사이클 ] App - 씬 전환 시에도 유지 (DontDestroyOnLoad) /// /// [ 특징 ] /// /// MonoBehaviour이므로 Unity 생명주기 메서드 사용 가능 /// 씬에 미리 배치하거나 Instance 접근 시 자동 생성 /// DontDestroyOnLoad 자동 적용 /// Inspector에서 설정 가능 /// /// /// [ 등록 방법 ] /// Injector.RegisterSingleton<InjectorSampleNetworkManager>(); /// /// [ 씬 설정 (선택) ] /// /// 빈 GameObject 생성 → 이름: "NetworkManager" /// InjectorSampleNetworkManager 컴포넌트 추가 /// /// 또는 코드에서 Instance 접근 시 자동으로 GameObject가 생성됩니다. /// /// [ 사용 방법 ] /// /// // 방법 1: [Inject] 어트리뷰트 사용 /// [Inject] private InjectorSampleNetworkManager _networkManager; /// _networkManager.Connect("wss://server.example.com"); /// /// // 방법 2: 직접 Instance 접근 (기존 Singleton 방식) /// InjectorSampleNetworkManager.Instance.Connect("wss://server.example.com"); /// /// /// [ InjectorSampleSettingsManager와의 차이점 ] /// /// SettingsManagerSingleton<T> - 순수 C#, GameObject 없음 /// NetworkManagerSingletonApp<T> - MonoBehaviour, GameObject 필요 /// /// public class InjectorSampleNetworkManager : SingletonApp { /// 서버 연결 상태 public bool IsConnected { get; private set; } /// /// SingletonApp 초기화 메서드 - Awake에서 자동 호출됩니다. /// protected override void Init() { base.Init(); Debug.Log("[InjectorSampleNetworkManager] Initialized"); } /// /// 서버에 연결합니다. /// /// 서버 URL (예: wss://server.example.com) public void Connect(string serverUrl) { Debug.Log($"[InjectorSampleNetworkManager] Connecting to {serverUrl}"); IsConnected = true; } /// /// 서버 연결을 해제합니다. /// public void Disconnect() { Debug.Log("[InjectorSampleNetworkManager] Disconnected"); IsConnected = false; } } }