3.面板基类
3.1 知识点
面板基类类图
面板基类思路
每一个Panel组件都加一个CanvasGroup组件。隐藏的时候把CanvasGroup组件透明度逐渐设置为0,显示的时候把CanvasGroup组件透明度逐渐设置为1。
创建BasePanel脚本,各个面板都要继承他。定义淡入淡出CanvasGroup组件和淡入淡出速度变量,Awake获取面板上挂载的CanvasGroup组件,如果没有 ,我们通过代码为它添加一个CanvasGroup组件
public abstract class BasePanel : MonoBehaviour
{
//整体控制淡入淡出的画布组 组件
private CanvasGroup canvasGroup;
//淡入淡出的速度
private float alphaSpeed = 10;
protected virtual void Awake()
{
//一开始获取面板上 挂载的 组件 如果没有 我们通过代码 为它添加一个
canvasGroup = this.GetComponent<CanvasGroup>();
if (canvasGroup == null)
canvasGroup = this.gameObject.AddComponent<CanvasGroup>();
}
}
定义bool变量 isShow记录面板是否显示。定义一个UnityAction变量hideCallBack记录当面板淡出成功后要执行的委托函数,比如删除当前面板预制体,之后会在UI管理器脚本中进行统一的管理。定义抽象方法 Init()让子类实现初始化工作,如按钮事件监听等。Start()中调用 Init() 方法进行初始化操作。定义显示面板虚方法 ShowMe(),将 isShow 设置为 true,并将面板的 alpha 值设为 0(即完全透明)。定义隐藏面板虚方法 HideMe(UnityAction callBack),将 isShow 设置为 false,并将面板的 alpha 值设为 1(即完全不透明)。同时记录传入的淡出成功后要执行的委托函数。 Update() 中,根据 isShow 的状态控制面板的 alpha 值实现淡入淡出效果。如果是淡入状态且面板的 alpha 值不等于 1,则将 alpha 值逐渐增加。如果是淡出状态且面板的 alpha 值小于等于 0,则将 alpha 值逐渐减小。当 alpha 值等于 0 时,调用 hideCallBack 执行淡出成功后的回调函数。
//是否开始显示
private bool isShow;
//当自己淡出成功时 要执行的委托函数
private UnityAction hideCallBack;
protected virtual void Start()
{
Init();
}
/// <summary>
/// 主要用于 初始化 按钮事件监听等等内容
/// </summary>
public abstract void Init();
/// <summary>
/// 显示自己时 做的事情
/// </summary>
public virtual void ShowMe()
{
isShow = true;
canvasGroup.alpha = 0;
}
/// <summary>
/// 隐藏自己时 做的事情
/// </summary>
public virtual void HideMe( UnityAction callBack )
{
isShow = false;
canvasGroup.alpha = 1;
//记录 传入的 当淡出成功后会执行的函数
hideCallBack = callBack;
}
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();
}
}
}
3.2 知识点代码
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()
{
//一开始获取面板上 挂载的 组件 如果没有 我们通过代码 为它添加一个
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()
{
isShow = true;
canvasGroup.alpha = 0;
}
/// <summary>
/// 隐藏自己时 做的事情
/// </summary>
public virtual void HideMe( UnityAction callBack )
{
isShow = false;
canvasGroup.alpha = 1;
//记录 传入的 当淡出成功后会执行的函数
hideCallBack = callBack;
}
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();
}
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com