using Cysharp.Threading.Tasks; using DG.Tweening; using PhxhSDK; using UnityEngine; using UniTask = Cysharp.Threading.Tasks.UniTask; public abstract partial class UIWindow { public GameObject gameObject; public Transform transform; public string name; private string mWindowName; public delegate void OnBgClose(); private OnBgClose _onBgCloseFunc; /// /// 资源引用管理器 /// private PhxhSDK.AssetReferenceManager _assetReferenceManager; private bool _shutMainCamera = true; private bool _isCloseCbCalled; protected bool _isShow = false; // 刘海屏适配器Ω private UINotchScreenAdapter _notchScreenAdapter; // GraphicRaycaster管理器 private GraphicRaycasterManager _graphicRaycasterManager; /// /// Public accessor for the `GraphicRaycasterManager`. Lazily initializes on first access and cannot be assigned. /// public GraphicRaycasterManager GraphicRaycasterManager { get { if (_graphicRaycasterManager == null) InitGraphicRaycasterManager(); return _graphicRaycasterManager; } } public bool IsUnEnabled; //是否不被激活 public bool IsClosing; //正在关闭 // 是否播放默认的打开对话框的声音 public bool isPlayDefaultOpenAudio = true; // 是否播放默认的关闭对话框的声音 public bool isPlayDefaultCloseAudio = true; private bool _isPlayingOpenAnim; protected Sequence _openAnimSeq; public bool IsShowOpenAnim; public string WindowName { set { mWindowName = value; } get { return mWindowName; } } [HideInInspector] public UIWindowLayer uiWindowLayer; [HideInInspector] protected bool isInited = false; /// /// 初始化GraphicRaycaster管理器 /// private void InitGraphicRaycasterManager() { if (_graphicRaycasterManager == null && gameObject != null) { _graphicRaycasterManager = new GraphicRaycasterManager(gameObject); } } /// /// 初始化刘海屏适配 /// private void InitScreenAdaption() { if (_notchScreenAdapter == null) { _notchScreenAdapter = new UINotchScreenAdapter(transform); } } public async UniTask LoadAssetAsync(string path) where T : UnityEngine.Object { if (gameObject) { // 确保资源管理器已初始化 if (_assetReferenceManager == null) { _assetReferenceManager = new PhxhSDK.AssetReferenceManager(); } return await _assetReferenceManager.LoadAssetAsync(path); } // 如果gameObject为空,直接通过AssetManager加载 return await AssetManager.Instance.LoadAssetAsync(path); } /// /// 异步预加载资源 /// /// 资源路径 public async UniTask PostPreload(string path) where T : UnityEngine.Object { // 确保资源管理器已初始化 if (_assetReferenceManager == null) { _assetReferenceManager = new PhxhSDK.AssetReferenceManager(); } await _assetReferenceManager.PostPreload(path); } /// /// 获取预加载的资源结果 /// /// 资源路径 public T GetPreLoadResult(string path) where T : UnityEngine.Object { // 优先使用资源管理器获取结果 if (_assetReferenceManager != null) { return _assetReferenceManager.GetPreLoadResult(path); } // 回退到直接使用AssetManager return AssetManager.Instance.GetPreLoadResult(path); } protected void UnLoad() { // 使用资源管理器卸载所有资源 if (_assetReferenceManager != null) { _assetReferenceManager.UnloadAll(); } } public virtual async UniTask OnBack(object data = null) { if (!GraphicRaycasterManager.IsEnableGraphicRaycaster) return true; if (UIManager.Instance.GetLast() != null) { OnDirectBack(); return true; } await OnBackApp(); return true; } protected void OnDirectBack() { CloseWindow(UIWindowCloseType.HideAndDestroy); } protected async UniTask OnBackApp() { await UIManager.Instance.CreateAndOpenWindow(UINameConst.UIBackReturn); } #region Component Utilities public GameObject FindObj(string path) { GameObject obj = transform.Find(path)?.gameObject; if (obj == null) { DebugUtil.LogError("{0}未找到 {1}/{2}", mWindowName, gameObject.name, path); } return obj; } public T GetComponent(string path = "") where T : Behaviour { var component = transform.Find(path)?.GetComponent(); if (component == null) { DebugUtil.LogError("{0}未找到组件{1}: {2}", mWindowName, typeof(T).Name, path); } return component; } public T AddComponent(string path = "") where T : Behaviour { var trans = transform.Find(path); if (trans) { var component = trans.GetComponent(); if (component == null) { component = trans.gameObject.AddComponent(); //DebugUtil.LogError("{0}未找到组件{1}: {2}", mWindowName, typeof(T).Name, path); } return component; } DebugUtil.LogError("{0}未找到路径: {1}", mWindowName, path); return null; } #endregion #region State Query Methods public bool IsCreated() { return isInited; } public bool IsShow() { return _isShow; } public bool IsHide() { return !_isShow; } #endregion protected void AddBgClose(OnBgClose onBgCloseFunc) { _onBgCloseFunc += onBgCloseFunc; } protected virtual void OnCloseClick() { } }