using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; public abstract class BasePanel : MonoBehaviour { private CanvasGroup _canvasGroup; private float alphaSpeed = 10; private bool isShow; private UnityAction hideCallback; [Header("面板设置")] public bool AllowBackButton = true; // 是否允许返回按钮关闭 public bool IsModal = false; // 是否为模态面板 protected virtual void Awake(){ _canvasGroup = GetComponent(); if (_canvasGroup == null) { _canvasGroup = gameObject.AddComponent(); } } protected virtual void Start(){ Init(); } public abstract void Init(); public virtual void ShowMe(bool isFade = true){ isShow = true; if(isFade){ _canvasGroup.alpha = 0; }else{ _canvasGroup.alpha = 1; } } public virtual void HideMe(bool isFade =true ,UnityAction callback = null){ isShow = false; if(isFade){ _canvasGroup.alpha = 1; }else{ _canvasGroup.alpha = 0; } hideCallback = callback; } void Update(){ if(isShow&&_canvasGroup.alpha!=1){ _canvasGroup.alpha +=alphaSpeed*Time.deltaTime; if(_canvasGroup.alpha>=1){ _canvasGroup.alpha = 1; } }else if(!isShow){ _canvasGroup.alpha -=alphaSpeed*Time.deltaTime; if(_canvasGroup.alpha<=0){ _canvasGroup.alpha = 0; hideCallback?.Invoke(); } } // 处理返回键 HandleBackButton(); } /// /// 处理返回按钮逻辑 /// protected virtual void HandleBackButton() { if (AllowBackButton && Input.GetKeyDown(KeyCode.Escape)) { OnBackButtonPressed(); } } /// /// 返回按钮被按下时的处理 /// 可以被子类重写以实现自定义逻辑 /// protected virtual void OnBackButtonPressed() { // 默认行为:关闭当前面板 ClosePanel(); } /// /// 关闭当前面板 /// protected virtual void ClosePanel() { // 使用UIManagerAdapter来避免命名冲突 UIManager.Instance.GoBack(); } /// /// 返回主界面 /// protected void ReturnToHome() { EnhancedUIManager.Instance.ReturnToHome(); } }