「Unity3D」(5)CanvasGroup功能和Fade动画
2017-11-13 21:57
459 查看
CanvasGroup 对于UGUI来说,提供了十分重要的便利功能,并且能够受益于Unity实现的性能优化。从命名来看Group明显是针对“批量”操作的一个概念。对于复杂的UI界面,会有意想不到的效果和效率。
Alpha 能够控制所有子节点UI元素的透明度。无论界面多么的复杂,只要是Graphic的子类,都能够被控制。这省去了针对各个元素,运行时的遍历,或是设计时的配置。
Interactable 能够控制所有子节点UI元素的交互性。无论界面多么复杂,只要是Selectable的子类,都能够被控制。交互性就是Button控件不可用的灰色状态,如同取消了Button的Interactable属性。
Blocks Raycasts 能够控制所有子节点UI元素事件触发。无论界面多么复杂,只要是Graphic的子类,都能够被控制。相当于取消了Graphic元素的Raycast Target属性。
Ignore Parent Groups 控制当前元素可受到,父类CanvasGroup的属性影响。
当使用CanvasGroup控制的时候,我们会看到UI子元素的,Alpha,Interactable,RaycastTarget属性并没有改变。可见在UGUI源码里,是使用CanvasGroup的属性做了过滤操作,来实现控制效果的。
既然CanvasGroup可以控制整体界面的Alpha值,那么利用这个特性,来做Fade渐变动画,就在合适不过了。既可以使用协程也可以使用tween算法。比如,我就使用tween提供了UI界面的整体Fade功能。
不仅如此,是否可以使用CanvasGroup的Alpha = 0 且 Blocks Raycasts = false,来达到隐藏界面的目的,以此来代替Active false的操作。
「小组件大作用」
Alpha 能够控制所有子节点UI元素的透明度。无论界面多么的复杂,只要是Graphic的子类,都能够被控制。这省去了针对各个元素,运行时的遍历,或是设计时的配置。
Interactable 能够控制所有子节点UI元素的交互性。无论界面多么复杂,只要是Selectable的子类,都能够被控制。交互性就是Button控件不可用的灰色状态,如同取消了Button的Interactable属性。
Blocks Raycasts 能够控制所有子节点UI元素事件触发。无论界面多么复杂,只要是Graphic的子类,都能够被控制。相当于取消了Graphic元素的Raycast Target属性。
Ignore Parent Groups 控制当前元素可受到,父类CanvasGroup的属性影响。
当使用CanvasGroup控制的时候,我们会看到UI子元素的,Alpha,Interactable,RaycastTarget属性并没有改变。可见在UGUI源码里,是使用CanvasGroup的属性做了过滤操作,来实现控制效果的。
既然CanvasGroup可以控制整体界面的Alpha值,那么利用这个特性,来做Fade渐变动画,就在合适不过了。既可以使用协程也可以使用tween算法。比如,我就使用tween提供了UI界面的整体Fade功能。
/// <summary> /// Fade in GameObject all children Graphic. /// </summary> public static void FadeInUI(this GameObject go, float duration, Action OnComplete = null) { var canvasGroup = go.GetComponent<CanvasGroup>(); if (canvasGroup == null) { canvasGroup = go.AddComponent<CanvasGroup>(); } canvasGroup.ActionFadeIn(duration).Play(); if (OnComplete != null) { Tween.Create().AddIntervalCallback(duration, OnComplete).Play(); } } /// <summary> /// Fade out GameObject all children Graphic. /// </summary> public static void FadeOutUI(this GameObject go, float duration, Action OnComplete = null) { var canvasGroup = go.GetComponent<CanvasGroup>(); if (canvasGroup == null) { canvasGroup = go.AddComponent<CanvasGroup>(); } canvasGroup.ActionFadeOut(duration).Play(); if (OnComplete != null) { Tween.Create().AddIntervalCallback(duration, OnComplete).Play(); } }
不仅如此,是否可以使用CanvasGroup的Alpha = 0 且 Blocks Raycasts = false,来达到隐藏界面的目的,以此来代替Active false的操作。
「小组件大作用」
相关文章推荐
- Unity3D之Mecanim动画系统学习笔记(十一):高级功能应用
- Unity3D之Mecanim动画系统学习笔记(十一):高级功能应用
- [原创]unity3D学习【功能实现】之七:Animator动画以及传递参数,简单功能
- 使用canvas画一个亮点跟随线移动的动画功能
- Unity3D之Mecanim动画系统学习笔记(十一):高级功能应用
- 「Unity3D」(4)使用AnimBool自定义Inspector动画效果
- 布局动画适用于ViewGroup
- CSS3基础(2)—— 文字与字体相关样式、盒子类型、背景与边框相关样式、变形处理、动画功能
- postgresql如何实现group_concat功能
- 奇妙的HTML5 Canvas动画实例
- sqlserver模仿mysql函数FIND_IN_SET,group_concat的功能
- Unity3D控制动画播放
- Unity3d 使用ShareSDK做分享和第三方登录功能
- Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系
- Unity3D之Mecanim动画系统学习笔记(四):Animation State
- HTML5 Canvas动画效果演示
- unity3d开发2d游戏:制作动画砖块实例代码
- 7 款基于 HTML5 Canvas 的超炫 3D 动画效果
- UGUI之Selectable功能详解上篇(UI动画制作与实现)
- Unity3d动画脚本 Animation Scripting(深入了解游戏引擎中的动画处理原理)