using UnityEngine; [RequireComponent(typeof(Animator), typeof(CanvasGroup))] public abstract class UIBase : MonoBehaviour { public bool IsShow => gameObject.activeSelf; private const string panelFadeIn = "Panel In"; private const string panelFadeOut = "Panel Out"; private Animator _anim; public Animator PanelAnimator { get => _anim; private set => _anim = value; } public virtual void Init(object[] pageData) { if (_anim == null) _anim = transform.GetComponent(); } public virtual void Destroy() { Destroy(gameObject); } public virtual void OnShow() { transform.GetComponent().anchorMin = Vector2.zero; transform.GetComponent().anchorMax = Vector2.one; transform.GetComponent().offsetMin = Vector2.zero; transform.GetComponent().offsetMax = Vector2.zero; gameObject.SetActive(true); gameObject.GetComponent().alpha = 0; if (PanelAnimator == null) PanelAnimator = GetComponent(); PanelAnimator.enabled = true; PanelAnimator.Play(panelFadeIn); } public virtual void OnEnter() { OnShow(); } public virtual void OnPause() { OnHide(); } public virtual void OnHide() { gameObject.SetActive(true); _anim.Play(panelFadeOut); gameObject.SetActive(false); } public virtual void HideDelay(float time) { if (!gameObject.activeSelf) { return; } if (time < 0) { OnHide(); return; } Invoke("Hide", time); } public virtual void OnResume() { } public virtual void OnExit() { } public virtual void MaskHide() { OnHide(); } }