1、关于CanvasGroup的的学习
Canvas Group可以用来控制一组不需要个别控制的UI元素的某些方面,CanvasGroup的属性会影响他所有children的GameObject
Canvas Group下各功能详解:
- Alpha:这个选项很多组件都有,用处也是一样的,在美术中,这个叫做Alpha通道的东东是用来控制透明度的,他的值从0到1.0是完全透明,1是完全不透明;
- Interactable确认该组件是否接受输入,当他被设置为false时,交互功能将被禁用;
- Block Raycasts是否让该组件像collider一样接受射线检测?你需要在依赖于Canvas的图形射线检测者上唤醒射线检测方法。这个不会作用于Physics.Raycast;
- Ignore Parent Groups(忽略父级团)是否响应父级group的方法
Canvas Group的应用场景:
- 在窗口的GameObject上添加一个CanvasGroup,通过控制它的Alpha值来淡入或淡出整个窗口;
- 通过给父级GameObject添加一个CanvasGroup并设置它的Interactable值为false来制作一整套没有交互(灰色)的控制;
- 通过将元素或元素的一个父级添加CanvasGroup并设置BlockRaycasts值为false来制作一个或多个不阻止鼠标事件的UI元素
结合后面两点或者1,3点,都可以实现很牛叉的功能
比如说游戏里某些情况某个按钮(或者其他UI)是不能点的,而另外一些情况可以点,这样就可以通过动态改变这个组件的BlocksRaycasts值以及Interactable来实现
再比如说游戏里点击某个按钮要让这个按钮不可点并逐渐消失掉,当然啦,也可以让别的东西消失啦,这就可以通过改变alpha值来实现
2、针对CanvasGroup的应用
a、楼主自己做了一个关于让UI组件忽明忽暗的小例子,类似呼吸灯的功能。功能很简单,大神勿喷。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CanvasGroupTest : MonoBehaviour { float time = 1; bool isShow = true; CanvasGroup canvasGroup; // Use this for initialization void Start () { canvasGroup = transform.GetComponent<CanvasGroup>(); canvasGroup.alpha = 1.0f; } // Update is called once per frame void Update () { if (isShow) { canvasGroup.alpha = canvasGroup.alpha - 0.005f; if (canvasGroup.alpha == 0) { isShow = false; } } else { canvasGroup.alpha = canvasGroup.alpha + 0.005f; if (canvasGroup.alpha == 1) { isShow = true; } } } }
b、针对Ignore Parent Groups的测试
- 在Canvas上添加CanvasGroup组件
- 在Canvas下添加两个Button,并在其中一个button上添加CanvasGroup组件。
- 将Canvas中的CanvasGroup组件上的Interactable选项勾选上,Canvas上及其子物体无交互功能。
- 将添加CanvasGroup组件的button中的Ignore Parent Groups选项勾选上。
- 编写buttontest脚本用于测试button的交互功能。
- 运行可发现,添加CanvasGroup组件并勾选Ignore Parent Groups选项的button依旧可以进行click操作。未添加CanvasGroup的button则不能进行点击操作。
demo地址:链接:https://pan.baidu.com/s/1qXDBeaC%20 密码:kmu2(不定时清理)