Files
EnglewoodLAB/Assets/Sample/Injector/InjectorSamplePlayerController.cs
2026-03-10 11:35:30 +09:00

69 lines
2.2 KiB
C#

using UnityEngine;
using UVC.Core;
namespace Sample
{
/// <summary>
/// 의존성 주입을 받는 클래스 예시
/// [Inject] 어트리뷰트로 필요한 서비스를 자동 주입받습니다.
/// </summary>
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");
}
}
}