合肥专业做淘宝网站推广,用什么网站做微信推送,网站的标题标签一般是写在,做的网站百度没收录CanvasGroup是Unity中用于控制UI的透明度、交互性和渲染顺序的组件。 一、常用属性的解释
1、alpha#xff1a;控制UI的透明度
类型#xff1a;float#xff0c;0.0 ~1.0#xff0c;
其中 0.0 完全透明#xff0c;1.0 完全不透明。
通过调整alpha值可以实现UI的淡入淡…CanvasGroup是Unity中用于控制UI的透明度、交互性和渲染顺序的组件。 一、常用属性的解释
1、alpha控制UI的透明度
类型float0.0 ~1.0
其中 0.0 完全透明1.0 完全不透明。
通过调整alpha值可以实现UI的淡入淡出效果可以参考本人的另一篇文章
Unity功能——设置提示面板的显示与掩藏
2、blocksRaycasts控制UI是否阻挡射线Raycasts
1类型booltrue/false
2true时会阻挡射线false时不会阻挡射线。
3用户不对该UI后面的UI进行射线检测可将值设置为true
3、interactable控制UI是否可交互如点击、拖动等
1类型booltrue/false
2true时会响应用户输入false时将忽略用户输入。
3用户不对该UI进行交互可将值设置为false
4、ignoreParentGroups控制UI是否忽略父级CanvasGroup的设置
1类型booltrue/false
2true时将忽略其父级CanvasGroup的alpha和interactable设置false时会受到父级CanvasGroup的设置影响。
3用户要独立控制UI的透明度和交互性可将值设置为true
二、组件的alpha属性和UI的alpha属性的异同
1、相同点
在视觉上是一样的都可控制UI能不能被用户看到也仅是控制物体的不透明度
在交互上都不会影响UI的交互性都可正常进行交互事件
在射线检测上也都不会改变UI对射线的阻挡特性
2、不同点
1作用范围不同
直接设置 UI 元素的alpha值只会影响该单个UI元素的透明度其父子元素不会受到影响。
而CanvasGroup组件可以控制其所在UI及其所有子对象的透明度。组件所在的UI对象以及它包含的所有子物体如按钮、文本框等都会统一改变透明度。
2性能影响不同
直接设置单个UI的alpha值性能开销相对较小因为只涉及到对单个对象的属性修改。
当使用CanvasGroup时会影响多个子对象Unity需要处理更多的渲染和交互状态更新
性能开销相对较大尤其是在子对象数量较多的情况下。不过在大多数正常场景下这种开销通常是可以接受的。
三、组件的alpha属性和UI的visible属性的异同
1、相同点
在视觉上是一样的都可控制UI能不能被用户看到
2、不同点
1直接设置UI的visible值为false后UI将完全不响应任何事件
因为visible为false背包及其内部子物体都不会被渲染出来更不会被交互
2而通过设置CanvasGroup组件的alpha值只是影响视觉效果不影响事件交互。
故即使aplha值为0对UI及其子物体的拖拽移动修改等任何事件都会正常执行。
四、重点blocksRaycasts和interactable之间的区别和使用场景
下面提到的自身包括挂载组件的UI以及UI内部的其他子对象。
1、异同
相同都会影响UI自身的交互
不同
Interactable是影响自身的输入事件影响交互状态
BlocksRaycasts是影响自身和自身以外后面的UI的射线事件影响射线检测状态。
2、使用环境
以背包面板为例
1状态说明如下
1仅背包上挂载CanvasGroup组件
2可通过键盘输入事件往背包内部物品格里增减物品
3背包、物品格里的物品、背包后面的物品X都能进行鼠标点击移动操作时
4点击重叠处通常会优先处理最上层的元素物品物品格背包物品X
4由于背包的visible值为false完全不响应任何事件
而CanvasGroup组件的alpha值只影响视觉效果不影响任何用户事件。
若visible为false无论CanvasGroup设置什么样物体X怎么也不会被背包遮挡能被射线检测到可被鼠标拖动。
故这里默认背包的visible值为true通过CanvasGroup的alpha值控制背包显示掩藏。
2情况分析
1Interactable为trueBlocksRaycasts为true
Interactable为true
表示背包及子物体的交互事件可正常执行鼠标键盘事件背包及子物体都可被接收。
blocksRaycasts为true
在检测鼠标点击时射线会首先命中背包面板鼠标点击事件会优先被背包面板接收并处理而不会触发后面物体 X 的点击拖动事件。
无论alpha值是不是为0背包面板是不是不可见都会认为背包面板仍然存在并会阻挡射线交互逻辑上优先响应背包面板
故鼠标点击背包/物品X
背包面板可被鼠标拖动背包里的物品也可以正常被鼠标移动
也可正常通过键盘事件往内部物品格里进行增减物品
物体X被背包遮挡不会被射线检测到无法被鼠标拖动
2Interactable为trueBlocksRaycasts为false
interactable为true
表明背包及其子元素理论上可以接受交互事件
但blocksRaycasts为false
背包面板不会阻挡射线检测射线会直接穿透背包面板命中其后面的物体X。
无论alpha值是不是为1背包面板是不是可见交互逻辑上只响应物体X的射线检测事件
不过键盘的事件不是由射线检测判断触发背包里的物品正常接收键盘事件
故鼠标点击背包/物品X
背包面板不能被鼠标拖动背包里的物品无法被鼠标移动
但可正常通过键盘事件往内部物品格里进行增减物品
物体X不会被背包遮挡可以被射线检测到被鼠标拖动
3Interactable为falseBlocksRaycasts为true
blocksRaycasts为true
在检测鼠标点击时射线会首先命中背包面板鼠标点击事件会优先被背包面板接收并处理而不会触发后面物体 X 的点击拖动事件。
但Interactable为false
背包及其子元素的交互层面被设置为不可用状态背包上的任何交互事件都不会被接受触发。
因此背包子物体的键盘事件不会被触发同时即使背包及其子物体接收了鼠标的射线检测也不会触发鼠标事件。
故鼠标点击背包/物品X
背包面板不能被鼠标拖动背包里的物品无法被鼠标移动
通过键盘事件也不能往内部物品格里进行增减物品
物体X会被背包遮挡不会被射线检测到无法被鼠标拖动
4Interactable为falseBlocksRaycasts为false
blocksRaycasts为false
背包面板不会阻挡射线检测射线会直接穿透背包面板命中其后面的物体X。交互逻辑上只响应物体X的射线检测事件。
Interactable为false
背包及其子元素的交互层面被设置为不可用状态背包上的任何交互事件都不会被接受触发。
因此背包和子物体的鼠标事件以及子物体的键盘事件都不会被触发。
故鼠标点击背包/物品X
背包面板不能被鼠标拖动背包里的物品无法被鼠标移动
通过键盘事件也不能往内部物品格里进行增减物品
物体X不会被背包遮挡可以被射线检测到被鼠标拖动