仅作学习,不做任何商业用途
不是源码,不是源码!
是我通过"照虎画猫"写的,可能有些小修改
不提供素材,所以应该不算是盗版资源,侵权删
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
//首先,写成抽象类用于继承
public abstract class 面板基类 : MonoBehaviour
{
#region 基础变量
//控制淡入淡出速度
public float ShowOrHideSpeed = 10;
//控制显示隐藏的变量
public bool IsTure;
//隐藏面板操作后的响应事件
private UnityAction isCallBack;
#endregion
#region 获取画布组
//这里首先获得画布管理组件
public CanvasGroup canvasGroup;
protected virtual void Awake() {
canvasGroup = GetComponent<CanvasGroup>();
if (canvasGroup == null) {
canvasGroup = this.gameObject.AddComponent<CanvasGroup>();
}
}
#endregion
#region 子面板重写监听方法
//写一个必须要重写的抽象方法
protected abstract void Init();
protected virtual void Start() {
Init();
}
#endregion
#region 显隐函数
public virtual void ShowMe() {
//alpha为0时为透明
//alpha为1时为显示
IsTure = true;
//初始化为0,后面会一点点加上
canvasGroup.alpha = 0;
}
public virtual void HideMe(UnityAction action) {
IsTure = false;
//初始化为1,后面会一点点减去
canvasGroup.alpha = 1;
isCallBack = action;
}
#endregion
// Update is called once per frame
void Update()
{
#region 触发显示
//控制显示
if (IsTure = true && canvasGroup.alpha != 1) {
canvasGroup.alpha += ShowOrHideSpeed * Time.deltaTime;
if (canvasGroup.alpha >= 1) {
canvasGroup.alpha = 1;
}
}
#endregion
#region 触发隐藏
//控制隐藏
if (IsTure = false && canvasGroup.alpha != 0) {
canvasGroup.alpha -= ShowOrHideSpeed * Time.deltaTime;
if (canvasGroup.alpha <= 0) {
canvasGroup.alpha = 0;
// 调用存储的方法
isCallBack?.Invoke();
}
}
#endregion
}
}