【原因】经过反复排查,发现是因为子物体有自己的Canvas组件导致的。父物体和子物体都有Canvas组件的情况下,子物体如果要响应点击事件需要自己的GraphicRaycaster组件。
而当子物体的Canvas设置了OverrideSorting之后,父物体CanvasGroup组件的Alpha属性能影响到子物体,Interactable属性和BlocksRaycasts属性却无法影响到子物体了。
实际情况中,如果把父物体的Alpha设为0且Interactable和BlocksRaycasts设为false,而子物体的渲染有较高层级,就会覆盖掉对父物体的UI射线检测,虽然看不见子物体但是点击的依然是子物体。
【解决方案】更改父节点的CanvasGroup时,通过GetComponentsInChildren的方式获取所有子节点的CanvasGroup组件并更改对应的值
大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新
Unity
开发技巧,觉得有用记得一键三连哦。
很早就想分享这个系列的文章,但是总是没有机会,最近就将这个系列整理一下,大家一起学习交流。
首先,介绍一个UGUI,NGUI是UGUI的前身,
Unity
开发团队将NGUI的开发团队收到自己开发团队下,并且由此开发了UGUI。
UGUI系统是从
Unity
4.6版本后才开.
-Alpha:这个选项很多
组件
都有,用处也是一样的,在美术中,这个叫做Alpha通道的东东是用来控制透明度的,他的值从0到1.0是完全透明,1是完全不透明;
-Interactable:确认该
组件
是否接受输入,当他被设置为false时,交互功能将被禁用;
-
Block
Ray
cas
ts
:是否让该
组件
像collider一样接受射线检测?你需要在依赖于
Canvas
的图形射线检测者上唤醒射线检测方法。这个不会作用于Physics.Ray
cas
t;
-Ignore Parent
Group
s(忽略父级团)..
1.Graphic Ray
cas
ter:主要用于UI上的射线检测
a.挂有这个
组件
的
物体
,必须也要挂上
Canvas
这个
组件
,因为Graphic Ray
cas
ter依赖于
Canvas
b.挂有这个
组件
的
物体
,必须也要挂上继承Graphic的
组件
,即必须要有Image/Text/RawImage三个
组件
之一
c.Ignore Reversed Graphics:是否忽略反方向的图形,如果
Canvas
Group
对于UGUI来说,提供了十分重要的便利功能,并且能够受益于
Unity
实现的性能优化。从命名来看
Group
明显是针对“批量”操作的一个概念。对于复杂的UI界面,会有意想不到的效果和效率。
Alpha 能够控制所有子节点UI元素的透明度。无论界面多么的复杂,只要是Graphic的子类,都能够被控制。这省去了针对各个元素,运行时的遍历,或是设计时的配置。
Interactable
void SetPanelPos(Transform parent)
RectTransform parentRect = parent.GetComponent<RectTransform>();
_pivot.x = parent.position.x > 0 ? 1 : 0;
在一个面板中通过触发按钮操作弹出子面板后,点击原面板还会继续生成新的子面板,这时候需要能够让原面板暂停,也就是不响应,可以用到
Canvas
Group
组件
Alpha这个选项很多
组件
都有,用处也是一样的,在美术中,这个叫做Alpha通道的东东是用来控制透明度的,他的值从0到1.0是完全透明,1是完全不透明;
Interactable确认该
组件
是否接受输入,当他被设置为false时,交互功能将被禁用;
Block
Ray
cas
ts
是否让该
组件
像collider一样接受射线检测?你需要在依赖于
Canvas
的图形射
新建脚本(为了能实现拖拽脚本我们要拖拽的是slot脚本)
使用新的命名空间,UntiyEngine.Even
tS
ystems
IBeginDragHandler,IDragHandler,IEndDragHandler
q:拖拽的过程中会被其他的格子挡住
d:在Untiy中因为渲染的顺序,为了不被挡住,我希望他跟它的父级脱离管理,并放在grid的位置上
logic:脱离完父子关系之后,我希望放到格子里,如果没有东西放进去,如果有东西和格子里的东西互换位置,为了让物品有交换我们要...
首先创建一个buttonBig,它很大♂,我将它的image里面的颜色alpha调至一半,颜色稍红。添加
Canvas
Group
组件
然后创建两个小的button。他们都是默认的样子。
之后调整大button,使大Button在小Button的上面。
然后以大Button为父对象,创建一些UGUI的其他物件,像sli...