CutePet/Assets/Scripts/BeginScene/UI/BasePanel.cs
2024-10-25 11:10:04 +08:00

87 lines
2.0 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;
//当前是隐藏还是显示 标识
public bool isShow;
//当隐藏完毕后 想要做的事情
private UnityAction hideCallBack = null;
protected virtual void Awake()
{
//一开始获取面板上挂载的 组件
canvasGroup = this.GetComponent<CanvasGroup>();
//如果忘记添加这样一个脚本了
if (canvasGroup == null)
{
canvasGroup = this.gameObject.AddComponent<CanvasGroup>();
}
}
protected virtual void Start()
{
Init();
}
/// <summary>
/// 注册空间时间的方法 所有的子面板 都需要去注册一些空间事件
/// 所以写成抽象方法 让子类必须去实现
/// </summary>
public abstract void Init();
/// <summary>
/// 显示自己时做的逻辑
/// </summary>
public virtual void ShowMe()
{
//canvasGroup.alpha = 0;
isShow = true;
}
/// <summary>
/// 隐藏自己时做的逻辑
/// </summary>
public virtual void HideMe(UnityAction callBack)
{
canvasGroup.alpha = 1;
isShow = false;
hideCallBack = callBack;
}
protected virtual void Update()
{
//当处于显示状态时 如果透明度 不为1 就会不停的加到1 加到1后 就停止变化了
//谈入
//if (isShow&canvasGroup.alpha!=1)
//{
// canvasGroup.alpha += alphaSpeed * Time.deltaTime;
// if (canvasGroup.alpha>=1)
// {
// canvasGroup.alpha = 1;
// }
//}
//淡出
if (!isShow&&canvasGroup.alpha!=0)
{
canvasGroup.alpha -= alphaSpeed * Time.deltaTime;
if (canvasGroup.alpha<=0)
{
canvasGroup.alpha = 0;
//让面板 透明度淡出完成后 再去执行的一些逻辑
hideCallBack?.Invoke();
}
}
}
}