UTKToolBar 개발 완료

This commit is contained in:
logonkhi
2026-02-19 18:40:37 +09:00
parent 0333b83b57
commit 739a62eb9b
112 changed files with 7496 additions and 46 deletions

View File

@@ -13,13 +13,13 @@ namespace Sample
/// <para><b>[ 특징 ]</b></para>
/// <list type="bullet">
/// <item><description>프리팹 없이 런타임에 새 GameObject가 자동 생성됨</description></item>
/// <item><description>Injector가 new GameObject().AddComponent&lt;T&gt;()로 생성</description></item>
/// <item><description>Injector가 new GameObject().AddComponent<T>()로 생성</description></item>
/// <item><description>App 라이프사이클이면 DontDestroyOnLoad 자동 적용</description></item>
/// <item><description>다른 서비스([Inject] ILogService)에 대한 의존성 주입 지원</description></item>
/// </list>
///
/// <para><b>[ 등록 방법 ]</b></para>
/// <code>Injector.Register&lt;IAudioManager, InjectorSampleAudioManager&gt;(ServiceLifetime.App);</code>
/// <code>Injector.Register<IAudioManager, InjectorSampleAudioManager>(ServiceLifetime.App);</code>
///
/// <para><b>[ 사용 방법 ]</b></para>
/// <code>
@@ -41,8 +41,8 @@ namespace Sample
///
/// private void Awake()
/// {
/// bgmSource = gameObject.AddComponent&lt;AudioSource&gt;();
/// sfxSource = gameObject.AddComponent&lt;AudioSource&gt;();
/// bgmSource = gameObject.AddComponent<AudioSource>();
/// sfxSource = gameObject.AddComponent<AudioSource>();
/// bgmSource.loop = true;
/// }
/// </code>

View File

@@ -7,7 +7,7 @@ namespace Sample
/// Type D 예시: MonoBehaviour SingletonApp - 네트워크 관리자
/// </summary>
/// <remarks>
/// <para><b>[ 타입 ]</b> Type D - MonoBehaviour SingletonApp (SingletonApp&lt;T&gt; 상속)</para>
/// <para><b>[ 타입 ]</b> Type D - MonoBehaviour SingletonApp (SingletonApp<T> 상속)</para>
/// <para><b>[ 라이프사이클 ]</b> App - 씬 전환 시에도 유지 (DontDestroyOnLoad)</para>
///
/// <para><b>[ 특징 ]</b></para>
@@ -19,7 +19,7 @@ namespace Sample
/// </list>
///
/// <para><b>[ 등록 방법 ]</b></para>
/// <code>Injector.RegisterSingleton&lt;InjectorSampleNetworkManager&gt;();</code>
/// <code>Injector.RegisterSingleton<InjectorSampleNetworkManager>();</code>
///
/// <para><b>[ 씬 설정 (선택) ]</b></para>
/// <list type="number">
@@ -40,8 +40,8 @@ namespace Sample
///
/// <para><b>[ InjectorSampleSettingsManager와의 차이점 ]</b></para>
/// <list type="table">
/// <item><term>SettingsManager</term><description>Singleton&lt;T&gt; - 순수 C#, GameObject 없음</description></item>
/// <item><term>NetworkManager</term><description>SingletonApp&lt;T&gt; - MonoBehaviour, GameObject 필요</description></item>
/// <item><term>SettingsManager</term><description>Singleton<T> - 순수 C#, GameObject 없음</description></item>
/// <item><term>NetworkManager</term><description>SingletonApp<T> - MonoBehaviour, GameObject 필요</description></item>
/// </list>
/// </remarks>
public class InjectorSampleNetworkManager : SingletonApp<InjectorSampleNetworkManager>

View File

@@ -7,7 +7,7 @@ namespace Sample
/// Type D 예시: 순수 C# Singleton - 게임 설정 관리자
/// </summary>
/// <remarks>
/// <para><b>[ 타입 ]</b> Type D - 순수 C# Singleton (Singleton&lt;T&gt; 상속)</para>
/// <para><b>[ 타입 ]</b> Type D - 순수 C# Singleton (Singleton<T> 상속)</para>
/// <para><b>[ 라이프사이클 ]</b> App - 애플리케이션 전체 유지</para>
///
/// <para><b>[ 특징 ]</b></para>
@@ -19,7 +19,7 @@ namespace Sample
/// </list>
///
/// <para><b>[ 등록 방법 ]</b></para>
/// <code>Injector.RegisterSingleton&lt;InjectorSampleSettingsManager&gt;();</code>
/// <code>Injector.RegisterSingleton<InjectorSampleSettingsManager>();</code>
///
/// <para><b>[ 사용 방법 ]</b></para>
/// <code>

View File

@@ -34,7 +34,7 @@ namespace Sample
///
/// protected override void RegisterServices()
/// {
/// Injector.RegisterPrefab&lt;IUIManager&gt;(uiManagerPrefab.gameObject, ServiceLifetime.App);
/// Injector.RegisterPrefab<IUIManager>(uiManagerPrefab.gameObject, ServiceLifetime.App);
/// }
/// </code>
///

View File

@@ -33,7 +33,7 @@ namespace Sample
/// </summary>
/// <remarks>
/// <para><b>구현체:</b> ConsoleLogger</para>
/// <para><b>등록:</b> Injector.Register&lt;ILogService, ConsoleLogger&gt;(ServiceLifetime.App)</para>
/// <para><b>등록:</b> Injector.Register<ILogService, ConsoleLogger>(ServiceLifetime.App)</para>
/// <para><b>사용:</b> [Inject] private ILogService _logger;</para>
/// </remarks>
public interface ILogService
@@ -73,8 +73,8 @@ namespace Sample
/// </summary>
/// <remarks>
/// <para><b>구현체:</b> SceneConfig</para>
/// <para><b>등록:</b> Injector.Register&lt;ISceneConfig, SceneConfig&gt;(ServiceLifetime.Scene)</para>
/// <para><b>또는 Factory:</b> Injector.RegisterFactory&lt;ISceneConfig&gt;(injector => new SceneConfig { ... })</para>
/// <para><b>등록:</b> Injector.Register<ISceneConfig, SceneConfig>(ServiceLifetime.Scene)</para>
/// <para><b>또는 Factory:</b> Injector.RegisterFactory<ISceneConfig>(injector => new SceneConfig { ... })</para>
/// </remarks>
public interface ISceneConfig
{
@@ -129,7 +129,7 @@ namespace Sample
/// <example>
/// <code>
/// // 등록
/// Injector.Register&lt;IGameService, GameService&gt;(ServiceLifetime.App);
/// Injector.Register<IGameService, GameService>(ServiceLifetime.App);
///
/// // 사용
/// [Inject] private IGameService _gameService;
@@ -154,7 +154,7 @@ namespace Sample
/// <remarks>
/// <para><b>구현체:</b> InjectorSampleAudioManager (별도 파일)</para>
/// <para><b>타입:</b> Type B - MonoBehaviour 동적 생성</para>
/// <para><b>등록:</b> Injector.Register&lt;IAudioManager, InjectorSampleAudioManager&gt;(ServiceLifetime.App)</para>
/// <para><b>등록:</b> Injector.Register<IAudioManager, InjectorSampleAudioManager>(ServiceLifetime.App)</para>
/// <para><b>특징:</b> 런타임에 새 GameObject가 생성되고 AudioSource 등 Unity 컴포넌트 활용 가능</para>
/// </remarks>
public interface IAudioManager
@@ -173,7 +173,7 @@ namespace Sample
/// <remarks>
/// <para><b>구현체:</b> InjectorSampleEnemySpawner (별도 파일)</para>
/// <para><b>타입:</b> Type B - MonoBehaviour 동적 생성</para>
/// <para><b>등록:</b> Injector.Register&lt;IEnemySpawner, InjectorSampleEnemySpawner&gt;(ServiceLifetime.Scene)</para>
/// <para><b>등록:</b> Injector.Register<IEnemySpawner, InjectorSampleEnemySpawner>(ServiceLifetime.Scene)</para>
/// <para><b>라이프사이클:</b> Scene - 씬 전환 시 적 스포너와 생성된 적들이 함께 정리됨</para>
/// </remarks>
public interface IEnemySpawner
@@ -194,7 +194,7 @@ namespace Sample
/// <remarks>
/// <para><b>구현체:</b> InjectorSampleUIManager (별도 파일)</para>
/// <para><b>타입:</b> Type C - Prefab 기반 MonoBehaviour</para>
/// <para><b>등록:</b> Injector.RegisterPrefab&lt;IUIManager&gt;(uiManagerPrefab, ServiceLifetime.App)</para>
/// <para><b>등록:</b> Injector.RegisterPrefab<IUIManager>(uiManagerPrefab, ServiceLifetime.App)</para>
/// <para><b>특징:</b></para>
/// <list type="bullet">
/// <item><description>프리팹에 미리 설정된 UI 요소들이 유지됨</description></item>
@@ -220,7 +220,7 @@ namespace Sample
/// <remarks>
/// <para><b>구현체:</b> InjectorSampleSceneUI (별도 파일)</para>
/// <para><b>타입:</b> Type C - Prefab 기반 MonoBehaviour</para>
/// <para><b>등록:</b> Injector.RegisterPrefab&lt;ISceneUI&gt;(sceneUIPrefab, ServiceLifetime.Scene)</para>
/// <para><b>등록:</b> Injector.RegisterPrefab<ISceneUI>(sceneUIPrefab, ServiceLifetime.Scene)</para>
/// <para><b>라이프사이클:</b> Scene - 씬 전환 시 UI가 함께 정리됨</para>
/// </remarks>
public interface ISceneUI
@@ -268,11 +268,11 @@ namespace Sample
/// <example>
/// <code>
/// // 등록
/// Injector.Register&lt;IRequestHandler, RequestHandler&gt;(ServiceLifetime.Transient);
/// Injector.Register<IRequestHandler, RequestHandler>(ServiceLifetime.Transient);
///
/// // 사용 - 매번 다른 인스턴스
/// var handler1 = Injector.Resolve&lt;IRequestHandler&gt;(); // RequestId: "a1b2c3d4"
/// var handler2 = Injector.Resolve&lt;IRequestHandler&gt;(); // RequestId: "e5f6g7h8"
/// var handler1 = Injector.Resolve<IRequestHandler>(); // RequestId: "a1b2c3d4"
/// var handler2 = Injector.Resolve<IRequestHandler>(); // RequestId: "e5f6g7h8"
/// </code>
/// </example>
public class RequestHandler : IRequestHandler