using UnityEngine; using UVC.Core; namespace Sample { /// /// 의존성 주입을 받는 클래스 예시 /// [Inject] 어트리뷰트로 필요한 서비스를 자동 주입받습니다. /// public class InjectorSamplePlayerController : MonoBehaviour { [Header("Player Settings")] [SerializeField] private float moveSpeed = 5f; // 필수 의존성 [Inject] private ILogService _logger; [Inject] private IAudioManager _audioManager; [Inject] private IGameService _gameService; // 선택적 의존성 [Inject(Optional = true)] private IUIManager _uiManager; [Inject(Optional = true)] private IEnemySpawner _enemySpawner; // 기존 Singleton 주입 [Inject] private InjectorSampleSettingsManager _settings; [Inject] private InjectorSampleNetworkManager _networkManager; // Scene 라이프사이클 서비스 [Inject(Optional = true)] private InjectorSampleLevelManager _levelManager; [Inject(Optional = true)] private ISceneConfig _sceneConfig; private void Start() { _logger?.Log("PlayerController Start"); _logger?.Log($"Settings - Volume: {_settings?.MasterVolume}"); _logger?.Log($"Network Connected: {_networkManager?.IsConnected}"); _logger?.Log($"Scene: {_sceneConfig?.SceneName}"); _gameService?.Initialize(); } private void Update() { // Space: 점프 + 점수 추가 if (Input.GetKeyDown(KeyCode.Space)) { _audioManager?.PlaySFX("jump"); _levelManager?.AddScore(10); } // Escape: 일시정지 팝업 if (Input.GetKeyDown(KeyCode.Escape)) _uiManager?.ShowPopup("Pause", "Game Paused"); // E: 적 스폰 if (Input.GetKeyDown(KeyCode.E)) _enemySpawner?.SpawnEnemy(transform.position + Vector3.forward * 5f); // S: 게임 저장 if (Input.GetKeyDown(KeyCode.S)) _gameService?.SaveGame(); } private void OnDestroy() { _logger?.Log("PlayerController Destroyed"); } } }