UI.Demo.面板基类
内容
- 唤醒界面 触发 画布组件判断
- 写一个初始化抽象方法给之后的界面继承
- 写显示和关闭(淡入淡出的函数)
- 淡出时 添加事件用于 让管理器删除界面
- 淡入淡出的update逻辑(包括速度和alpha判断)
代码
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;
protected virtual void Awake()
{
//获取画布组件,如果画布组件为null,代码加入组件
canvasGroup = GetComponent<CanvasGroup>();
if (canvasGroup == null) canvasGroup = gameObject.AddComponent<CanvasGroup>();
}
protected virtual void Start()
{
Init();
}
public abstract void Init();
public virtual void ShowMe()
{
isShow = true;
canvasGroup.alpha = 0;
}
public virtual void HideMe(UnityAction callBack)
{
isShow = false;
canvasGroup.alpha = 1;
//记录传入的 当淡出成功后 会执行的函数
hideCallBack = callBack;
}
// Update is called once per frame
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();
}
}
}
}