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