Unity中CanvasGroup组件
介绍:Canvas Group可以影响该组UI元素的部分性质,而不需要费力的对该组UI下的每个元素进行逐一得得调整。Canvas Group是同时作用于该组件UI下的全部元素。参数:Alpha : 该组UI元素的透明度。注:每个UI最终的透明度是由此值和自身的alpha数值相乘得到。Interactable : 是否需要交互(勾选的则是可交互),同时作用于该组全部UI元素。...
介绍:
Canvas Group可以影响该组UI元素的部分性质,而不需要费力的对该组UI下的每个元素进行逐一得得调整。Canvas Group是同时作用于该组件UI下的全部元素。
参数:
Alpha : 该组UI元素的透明度。注:每个UI最终的透明度是由此值和自身的alpha数值相乘得到。
Interactable : 是否需要交互(勾选的则是可交互),同时作用于该组全部UI元素。
Blcok Raycasts : 是否可以接收图形射线的检测(勾选则接受检测)。注:不适用于Physics.Raycast.。
Ignore Parent Group : 是否需要忽略父级对象中的CanvasGroup的设置。(勾选则忽略)
应用场景:
1、在窗口的GameObject上添加一个CanvasGroup,通过控制它的Alpha值来淡入淡出整个窗口;
2、通过给父级GameObject上添加一个CanvasGroup并设置它的Interactable值为false来设置一套没有交互(灰色)的控制;
3、通过将元素或元素的一个父级添加Canvas Group并设置BlockRaycasts值为false来制作一个或多个不阻止鼠标事件的UI元素;
CanvasGroup的Alpha与SetActive()方法比较:
1、CanvasGroup的Alpha与SetActive()两者之间的性能区别不大。
2、CanvasGroup的Alpha由0设为1的时候,并不会让自己活着的子节点中脚本执行Awake()方法,而SetActive(true)则会执行Awake()方法。
3、CanvasGroup的Alpha设为0和SetActive(false)的时候,同样不会调用drawcall;
小实例(一闪一暗)代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour {
private float alpha0 = 0.0f;
private float alphaSpeed = 2.0f;
bool isShow;
private CanvasGroup cg;
void Start () {
cg = this.transform.GetComponent<CanvasGroup>();
}
void Update ()
{
if (!isShow)
{
cg.alpha = Mathf.Lerp(cg.alpha, alpha0, alphaSpeed * Time.deltaTime);
if (Mathf.Abs(alpha0 - cg.alpha) <= 0.01)
{
isShow = true;
cg.alpha = alpha0;
alpha0 = 1;
}
}
else
{
//*0.5是因为从隐藏当显示感觉很快
cg.alpha = Mathf.Lerp(cg.alpha, alpha0, alphaSpeed * Time.deltaTime * 0.5f);
if (Mathf.Abs(alpha0 - cg.alpha) <= 0.01)
{
isShow = false;
cg.alpha = alpha0;
alpha0 = 0;
}
}
}
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)