Unity3D--如何控制UGUI的触摸 使其可以控制穿透UGUI触摸到其它物体

如何控制UGUI触摸 使可以控制穿透UGUI触摸到其它物体

方法1:
其它物体通过 EventSystem.current.currentSelectedGameObject 来进行判断
那么就是UGUI当想穿透的时候,不能有selected触发

方法2:
底层加一个Panel
凡是需要穿透的物体,加一个Cancas Group,然后关闭拦截,让其穿透

方法3:
根据EventSystem.current.IsPointerOverGameObject,据说有bug

方法4:
给摄像机添加 PhysicsRaycaster ,然后3D物体就可以使用UI的事件接口

由于IPointerClickHandler不需要Selectedtable控制,但是又受其限制
所以不建议对没有Selectable组件的物体添加IPointerClickHandler
但是IPointerClickHandler即使Selectable的interactable为false也会触发

对于需要使用interable = false的物体,添加上IPointerClickHandler,触发的时候让Selectedtable物体为该物体

对于想要穿透的,添加一个空的Event Trigger,否则EventSystem.current.currentSelectedGameObjec非空,并且会产生颜色变化
对于不想要穿透的,只要该物体直到跟父物体,有一个物体有Selectable组件,并且第一个物体interable为true即可(小心点击事件会被触发,所以不建议)
没有Selectedable不想被穿透的,还是建议添加Selectedtable,EventTrigger也行,但是EventTrigger就不会让Selected为该物体了
对于原本有Selectable组件的,但是可能被关掉的,可以用EventTrigger或IP将Selected指向该物体

至于Selected,在OnClickDown的时候决定的

OnClick事件触发优先级大于OnPointerClick
OnClick先添加先触发

Selectable需要Image

对于只有IPointerClickHandler
没有Selectable组件的物体
如果直到根父节点都没有Selectable组件
那么该IPointerClickHandler事件会被触发
但是EventSystem.current.currentSelectedGameObject为空

否则,该IPointerClickHandler事件不会触发
同级物体不会触发,直接跳到有Selectable的父级物体

但是,父级物体不会触发OnClick和IPointerClickHandler事件(原物体得有IPointer事件,也就是没有的话,还是会触发的)
但是选中效果会被触发,EventSystem.current.currentSelectedGameObject为该父物体
这是bug,就算父物体不在点击范围也会被触发到

关闭Interactble
将会导致拦截了触摸事件,IPointerClickHandler能触发
但是EventSystem.current.currentSelectedGameObject为空

EventTrigger实现的IPointerClickHandler
就算没有Selectable也能触发
但是EventSystem.current.currentSelectedGameObject为空

以上这些都仅在同一个Canvas里面生效,不会跨越Canvas

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值