#nullable enable using Cysharp.Threading.Tasks; using UVC.Studio.Config; using System; using UnityEngine; using UVC.Core; using UVC.Data; using UVC.Locale; using UVC.Util; using UVC.UI.Loading; using RTGLite; using UVC.UIToolkit; using UnityEngine.UIElements; namespace UVC.Studio { [DefaultExecutionOrder(100)] public class StudioAppMain : SingletonApp { [SerializeField] private UIDocument? modalUI; public Action Initialized; /// /// 초기 화 메서드입니다. /// Awake 메서드에서 호출되며, MonoBehaviour가 생성될 때 한 번만 실행됩니다. /// protected override async void Init() { // 플레이 모드가 아닐 경우, 초기화 로직을 실행하지 않습니다. if (!Application.isPlaying) return; #if !UNITY_WEBGL || UNITY_EDITOR //로깅 설정 UVC.Log.Log4netCodeConfigurator.Setup(); #endif if(modalUI != null) UTKLoading.SetRoot(modalUI.rootVisualElement); UTKLoading.Show(); RTGLite.RTG.get.initialized += OnRTGInit; await SettupConfigAsync(); if (Initialized != null) { Initialized.Invoke(); } } void Start() { //Tester.RunAllTests(); } private async UniTask SettupConfigAsync() { if (StudioAppConfig.LoadConfig()) { Application.targetFrameRate = StudioAppConfig.Config.TargetFrameRate; //기본 언어 설정 bool success = LocalizationManager.Instance.LoadDefaultLocalizationData(StudioAppConfig.Config.Language); Debug.Log($"LocalizationManager: LoadDefaultLocalizationData success: {success}"); if (!Application.isEditor && Application.platform == RuntimePlatform.WindowsPlayer) { //창 설정 if (StudioAppConfig.Config.Window != null) { WindowTools.Instance.Init(StudioAppConfig.Config.Window); } } } //사용자 DataMask 설정 AppData에서 로드 await UserSetting.LoadFromAppData(); } private async void OnRTGInit() { RTGizmos.get.CreateViewGizmo(RTCamera.get.settings.targetCamera); // Start 전에 호출 되서 Injection 완료 대기 후 Setting 인스턴스 획득 await InjectorAppContext.Instance.WaitForInitializationAsync(); Setting setting = InjectorAppContext.Instance.Get(); RTGizmos.get.skin.viewGizmoStyle.screenPadding = new Vector2(25f, 40f); // Grid 크기 설정에 즉시 적용 RTGrid.get.settings.cellSize = new Vector3(setting.Data.general.gridSize, setting.Data.general.gridSize, setting.Data.general.gridSize); // RTGizmos 위치/회전/스케일 스냅 설정에 즉시 적용 RTGizmos.get.skin.globalGizmoStyle.positionSnap = setting.Data.general.snapPosition; RTGizmos.get.skin.globalGizmoStyle.rotationSnap = setting.Data.general.snapRotation; RTGizmos.get.skin.globalGizmoStyle.scaleSnap = setting.Data.general.snapScale; } } }