使用这个组件实现淡入淡出
- public abstract class BasePanel : MonoBehaviour
- {
- //控制面板透明度 用于淡入淡出
- private CanvasGroup canvasGroup;
- //淡入淡出速度
- private float alphaSpeed = 10;
- //隐藏还是显示
- public bool isShow = false;
- //隐藏完毕后做的事
- private UnityAction hideCallBack = null;
-
- protected virtual void Awake()
- {
- //获取面板挂载的组件
- canvasGroup = 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;
- }
- // Update is called once per frame
- void Update()
- {
- //淡入
- //显示 并且 透明度不为1
- if (isShow && canvasGroup.alpha!=1)
- {
- //透明度从0加到1
- canvasGroup.alpha += alphaSpeed * Time.deltaTime;
- if (canvasGroup.alpha>=1)
- {
- canvasGroup.alpha = 1;
- }
- }
- //淡出
- //不显示 并且 透明度不为0
- else if (!isShow && canvasGroup.alpha!=0)
- {
- //透明度从1减到0
- canvasGroup.alpha -= alphaSpeed * Time.deltaTime;
- if (canvasGroup.alpha <=0)
- {
- canvasGroup.alpha = 0;
- //淡出后 执行逻辑
- hideCallBack?.Invoke();
- }
- }
- }
- }