Unity——CanvasGroup组件

在这里插入图片描述

描述

一种可放置 Canvas 的元素,可用于修改子 Alpha、Raycasting、Enabled 状态。

画布组可用于修改子元素的状态。

随时间推移逐渐消失的窗口就是这样的一个示例。通过修改该组的 Alpha 值,将对子元素产生影响。最终的 Alpha 将是任何嵌套的组与画布元素的 Alpha 相乘的结果。

也可以将画布组配置为不阻止射线投射(在计算图形射线投射时,将忽略该组中的所有内容),以及元素是否可交互。

变量

变量含义
alpha设置组的 Alpha。
blocksRaycasts该组是否阻止射线投射(允许碰撞)。
interactable该组是否可交互(组下的元素是否处于启用状态)。
ignoreParentGroups该组是否应忽略父组?。

用途

用途一、相当与SetActive的功效,控制UI显示隐藏

一般情况下,看不见的界面,也是需要屏蔽掉相关的操作和交互,避免诡异的bug出现。因此用这种方式代替SetActive时,我总是三个变量一同设置的,就像下面代码一样:
public static void SetActive(this DlgMainMenu self, bool isOn)
{
    float val = isOn ? 1 : 0;
    self.canvasGroup.alpha = val;
    self.canvasGroup.blocksRaycasts = isOn;
    self.canvasGroup.interactable = isOn;
}

用途二、UI的淡入淡出效果

alpha从0到1淡入,从1到0淡出

在这里插入图片描述

public class FadeOut : MonoBehaviour
{
    private CanvasGroup canvasGroup;
    public Slider slider;

    private bool isFadeOut = true; //淡出
    private float alphaVal = 0;    //目标透明度
    private float speed = 2f;   //速度

    // Start is called before the first frame update
    void Start()
    {
        canvasGroup = transform.GetComponent<CanvasGroup>();
    }

    // Update is called once per frame
    void Update()
    {
        if (isFadeOut)
        {
            canvasGroup.alpha = Mathf.Lerp(canvasGroup.alpha, alphaVal, speed * Time.deltaTime);
            if (Mathf.Abs(alphaVal - canvasGroup.alpha) <= 0.01)
            {
                isFadeOut = false;
                canvasGroup.alpha = alphaVal;
                alphaVal = 0;

            }
        }
        else
        {

            canvasGroup.alpha = Mathf.Lerp(canvasGroup.alpha, alphaVal, speed * Time.deltaTime);
            if (Mathf.Abs(alphaVal - canvasGroup.alpha) <= 0.01)
            {
                isFadeOut = true;
                canvasGroup.alpha = alphaVal;
                alphaVal = 1;
            }
        }
        slider.value = canvasGroup.alpha;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值