Unity的UI面板基类

使用这个组件实现淡入淡出

复制代码
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();
            }
        }
    }
}
相关推荐
kiros_wang3 小时前
渐变/阴影/滤镜⾼阶⽤法:统⼀项⽬UI、精简冗余组件
ui·harmonyos
沫璃染墨9 小时前
《Qt从零入门系列(十一):Qt事件机制详解——从QEvent到鼠标、键盘与定时器事件》
c++·qt·ui·硬件工程·交互·个人开发·qt5
rhett. li12 小时前
用 AI 写 C++ 桌面 UI:TRAE + nim_duilib 实战指南
c++·人工智能·ui
传奇开心果编程12 小时前
【Flutter入门练中学】第3课:滚动与列表
android·学习·flutter·ui·ios
兰亭妙微UI设计公司14 小时前
兰亭妙微B 端交互设计:横向 & 纵向步骤条完整使用指南
ui
Java后端的Ai之路1 天前
SSE 接口设计 vs Agent UI:四个开源项目,把「模型吐词」和「界面更新」拆开后,我看懂了差距
ui·开源·sse·agui·agentui
传奇开心果编程1 天前
【Flutter入门练中学】第8课:动画与过渡
android·学习·flutter·ui·ios
传奇开心果编程1 天前
【Flutter入门练中学】第11课:状态管理进阶与声明式路由
android·学习·flutter·ui·ios
且随疾风前行.1 天前
UI核心 - UI绘制流程及原理
ui
大蓝头7 天前
安装包UI美化之路-nsNiuniuSkin全新UI调试与预览方法
ui·electron·安装包·截图控件·截屏控件