109 lines
2.6 KiB
C#
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();
|
||
|
|
}
|
||
|
|
}
|