Unity UGUI(如按钮等) 交互事件无响应问题!

一、 问题描述:

  1. 有多个World Space 模式的Canvas的情况下,某个或某几个Canvas下的UI交互事件无响应。
  2. 将多个摄像机分别渲染成Render Texture资源后,拖到Panel对象的Raw Image组件,这些摄像机下的UI交互事件无响应。(特别注意:在Unity下运行调试功能都正常,但是生成exe后无响应!)
  3. 基于问题2的内容,如果在代码中使用射线Raycast 发射射线获取与射线有交集的UI时,在Unity编辑器下正常获取,但发布生成exe程序后,无法获取,只能获取到Panel。

二、 解决方案:
解决办法参考1
解决办法参考2
解决办法参考3

三、 总结

  1. Canvas属性面板中,将对应的摄像机拖到Event Camera属性中。
  2. 必须具备有Graphic Raycast组件,其组件属性描述如下:

Ignore Reversed Graphics
这个属性是用来决定当交互部件水平或者垂直翻转到背面对着屏幕(不一定是180度,只要翻转到背面对着屏幕)的时候,是否忽略背面点击,勾上(翻转到背面不能点击)
取消勾选(不管怎么翻转都能点击)

Blocked Objects
这个属性决定了当有物体遮挡在UI前面,并且点击了遮挡部分的时候,是否应该忽略这次点击,
Three D(3D):遮挡在本UI前的是带有3DCollider的物体,点击遮挡部分,忽略本UI的响应,(点自己没反应)
Two D(2D): 遮挡在本UI前的是带有2DCollider的物体,点击遮挡部分,忽略本UI的响应,(点自己没反应)
None: 不忽略本UI的点击,不管有3D/2D的物体挡住,都响应本UI的点击
All:都忽略响应,当UI前的遮挡物体是带有任意Collider组件的,点击遮挡部分的时候,都忽略本UI,(点自己没反应)

Blocking Mask
这个属性一般和Blocked Objects参数一起调节起作用,默认是EveryThing
遮挡的物体如果刚好在勾选的层级下面的话,会构成阻挡点击交互的作用

在这里插入图片描述
3. 取消Panel对象Raw Image组件的raycast target选项,原理:让该panel不参与UI交互事件,这样raycast射线才能穿透该panel面板。
在这里插入图片描述
5.根据以上问题的总计,最重要的一点使如何让raycast射线穿透遮挡该UI的对象,这样的话,或许只要根据第二点修改blocking object 和blocking mask 也能解决射线穿透问题。此条只提供一种思路,并没有验证!

猜你喜欢

转载自blog.csdn.net/l1179237106/article/details/118492092
今日推荐