using System; using Cysharp.Threading.Tasks; using Framework; using PhxhSDK; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; using UnityEngine.Serialization; using Object = System.Object; public abstract class UIWindow : MonoBehaviour { private const string DEFAULT_SHOW_ANIM = "show"; private const string DEFAULT_HIDE_ANIM = "hide"; private string mWindowName; // 是否播放默认的打开对话框的声音 public bool isPlayDefaultOpenAudio = true; // 是否播放默认的关闭对话框的声音 public bool isPlayDefaultCloseAudio = true; public string WindowName { set { mWindowName = value; } get { return mWindowName; } } [HideInInspector] public UIWindowLayer uiWindowLayer; [HideInInspector] public bool isOpen = false; void Awake() { OnAwake(); } public void OpenWindow(object data) { Show(); if (data == null) { OnOpenWindow(); } else { OnOpenWindow(data); } if (isPlayDefaultOpenAudio) { //AudioManager3.Instance.PlaySound(""); } } public void CloseWindow(UIWindowCloseType closeType = UIWindowCloseType.OnlyHide) { OnCloseWindow(); if (isPlayDefaultCloseAudio && isOpen) { //AudioManager3.Instance.PlaySound(""); } if (closeType == UIWindowCloseType.HideAndDestroy) { Destroy(); UIManager.Instance.RemoveWindow(mWindowName); } else { Hide(); if (closeType == UIWindowCloseType.HideAndPush) { UIManager.Instance.PushWindow(this); } } } public virtual bool OnBack() { //AudioManager.Instance.PlaySound(SfxNameConst.button_s); CloseWindow(UIWindowCloseType.OnlyHide); return true; } public void ReloadWindow() { Show(); OnReloadWindow(); } public void ReloadWindow(object data) { Show(); OnReloadWindow(data); } private void Show() { isOpen = true; if (gameObject == null) { DebugUtil.Log("UI已被销毁:{0}", WindowName); } else { gameObject.SetActive(true); } } private void Hide() { isOpen = false; gameObject.SetActive(false); } private void Destroy() { isOpen = false; Destroy(gameObject); AssetManager.Instance.Unload(string.Format(UIManager.UI_PREFAB_PATH, mWindowName)); } /// /// 打开界面时调用 /// /// protected virtual void OnOpenWindow(object data) { } protected virtual void OnOpenWindow() { } /// /// 关闭界面时调用 /// protected virtual void OnCloseWindow() { } /// /// 重新加载界面时调用 /// protected virtual void OnReloadWindow(object data) { } protected virtual void OnReloadWindow() { } /// /// 私有Awake方法,会在基类Awake执行后调用 /// public abstract void OnAwake(); public GameObject BindButton(string target, Action action, bool playAudio = true) { GameObject obj = transform.Find(target)?.gameObject; if (obj != null) { Button button = obj.GetComponent