求指点在Laya下面的类似Stage.isTouchOnUI的处理

我在Laya环境下进行3d方面的测试,UI用的是fgui,场景是3d有BoxCollider,然后用了射线的方式进行碰撞检测,但是在点击UI的按钮时发现还是同样触发了射线碰撞,然后查看Unity版本有一个Stage.isTouchOnUI可以很方便的进行判断,但在Laya下面没有找到,请问该如何处理,谢谢?
已邀请:

谷主

赞同来自:

unity版本的点击测试是fairygui自己实现的,所以提供了这样一个方法。laya版本的点击测试直接是用laya自己的,所以你要问laya有没有提供。简单的说,放置一个laya的sprite,点到了sprite怎样区分射线碰撞的检测。我没有玩过laya的3d,所以提供不了帮助,如果你得到答案,希望能分享。

suteam

赞同来自:

谢谢谷主的指点,我先尝试一下看看怎么解决

suteam

赞同来自:

整了一天,有个地方还是不行,我大概说下吧。
这个问题Laya官方也没有类似的isTouchOnUI判断,给出的方案是给所在Sprite上面添加name值,比如button.name="xxx";,然后监听Stage的OnMouseDown事件,然后通过参数event.Target.name去判断当前点击的UI名,这个对于目前GButton是有效的,但是对普通的一个一张图确不行,因为我不管点击哪返回的总是GComponent,所以我给非按钮的图片设置name也没用,因为点击的永远都是整个大面板的GComponent,所以现在是卡在这里了,请问谷主这块该如何处理?谢谢

谷主

赞同来自:

那是因为你全屏界面没设置穿透。

suteam

赞同来自:

多谢,可以用了,不过还有点小问题,我在编辑器下勾选了点击穿透,但像GImage这种元件也会跟着一起穿透,然后发现GObject.touchable内部将GImage等这些元件不做处理,所以我目前的解决方式是在外部给所有UI图片或者背景图加了n3.displayObject.mouseEnabled = true;这句话,这样就能完全区分点击的是不是UI,即可解决目前的问题

谷主

赞同来自:

图片不处理点击这是fairygui的规则,这不是问题。如果你要阻挡穿透,应该转换成组件,而不是改掉这个底层的设计。否则你其他部分就会出莫名其妙的问题。

suteam

赞同来自:

嗯嗯,现在明白了,还是对编辑器拼UI方式没有正确理解,多谢多谢,那么现在Laya监听UI点击的做法,我是用了下面的方式,因为官方给的方案是设置Sprite.name,我觉得这样也略微麻烦,所以使用了内部的$owner来进行判断,因为用这个就不用每次设置name了,不知道这样做还有没有其他问题呢?
var object:Object = evt.target["$owner"];
if(object)
{
isTouchUI = true;
}
else
{
isTouchUI = false;
}

谷主

赞同来自:

可以的

神奇的蕉哥

赞同来自:

请问你这个是怎么解决

要回复问题请先登录注册