DCS/ruiyiweiUX/Assets/Scripts/UI/BasePanel.cs

109 lines
2.6 KiB
C#

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<CanvasGroup>();
if (_canvasGroup == null)
{
_canvasGroup = gameObject.AddComponent<CanvasGroup>();
}
}
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();
}
/// <summary>
/// 处理返回按钮逻辑
/// </summary>
protected virtual void HandleBackButton()
{
if (AllowBackButton && Input.GetKeyDown(KeyCode.Escape))
{
OnBackButtonPressed();
}
}
/// <summary>
/// 返回按钮被按下时的处理
/// 可以被子类重写以实现自定义逻辑
/// </summary>
protected virtual void OnBackButtonPressed()
{
// 默认行为:关闭当前面板
ClosePanel();
}
/// <summary>
/// 关闭当前面板
/// </summary>
protected virtual void ClosePanel()
{
// 使用UIManagerAdapter来避免命名冲突
UIManager.Instance.GoBack();
}
/// <summary>
/// 返回主界面
/// </summary>
protected void ReturnToHome()
{
EnhancedUIManager.Instance.ReturnToHome();
}
}