描述
一种可放置 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;
}
}