#nullable enable using UnityEngine; using UVC.Core; using UVC.Studio.Manager; using UVC.UI.Menu; using UVC.UI.ToolBar; using UVC.UI.Window.PropertyWindow; namespace UVC.Studio { public class StudioSceneContext : InjectorSceneContext { /// /// StudioSceneContext 인스턴스에 접근하기 위한 편의 프로퍼티 /// public static new StudioSceneContext? Instance => InjectorSceneContext.Instance as StudioSceneContext; [SerializeField] private Toolbox? toolbox; [SerializeField] private StudioSideTabBar? sideTabBar; [SerializeField] private PropertyWindow? propertyWindow; [SerializeField] private TopMenuController? topMenu; [SerializeField] private GameObject? stage; /// /// Scene 라이프사이클 서비스들을 등록합니다. /// 씬 로드 시 자동 호출되며, 씬 전환 시 자동으로 정리됩니다. /// protected override void RegisterSceneServices() { base.RegisterSceneServices(); // 여기에 StudioSceneContext에 등록할 서비스들을 추가하세요. Injector.RegisterSingleton(); if(toolbox != null) Injector.RegisterInstance(toolbox, ServiceLifetime.Scene); if(sideTabBar != null) Injector.RegisterInstance(sideTabBar, ServiceLifetime.Scene); if(propertyWindow != null) Injector.RegisterInstance(propertyWindow, ServiceLifetime.Scene); if(topMenu != null) Injector.RegisterInstance(topMenu, ServiceLifetime.Scene); if(stage != null) Injector.RegisterInstance(stage, ServiceLifetime.Scene); // StageObjectManager 등록 var stageObjectManager = new StageObjectManager(); Injector.RegisterInstance(stageObjectManager); // SelectionManager 등록 (StageObjectManager 의존) var selectionManager = new SelectionManager(stageObjectManager); Injector.RegisterInstance(selectionManager); } } }