美文网首页
Unity不让射线在UI开启时响应

Unity不让射线在UI开启时响应

作者: 腾讯网友 | 来源:发表于2019-11-27 12:37 被阅读0次

最近slg项目中有个需求,场景中有地块,给武将上阵,同时支持拖动,点击等基本操作,同时又要打开UI替换武将,需要处理点击穿透的问题

需求点:

1.点击地块,打开UI,但是不能点穿导致再次打开(其他办法也行不在这讨论);

2.打开UI,阻挡射线点击,和第一点需求差不多

3.Canvas Group只能解决 让射线响应 UI不被响应的需求,而不是UI开启时射线不响应的需求


地块最基本的box collider响应ray

场景中点击需要打开对应UI,操作一系列上阵创模等功能,但是打开UI的同时,点击到场景中这些碰撞盒,会持续响应,UI上BG image raycasttarget 并不能阻挡射线检测,这时需要代码中做一系列操作.

1.首先UI父物体上添加GraphicRaycaster组件,我这里mask只选了UI,其他不知道,没测试过,

2. 声明各种变量并找到

private GraphicRaycaster RaycastInCanvas;

private EventSystem eventSystem;

3.前任程序的做法是在Update中通过射线检测及完成各种需求

主要做法是Input.GetMouseButtonDown(0) 点击时在判断,增加下列代码

private bool CheckUiRaycastObjects()

    {

        PointerEventData eventData = new PointerEventData(eventSystem);

        eventData.pressPosition = Input.mousePosition;

        eventData.position = Input.mousePosition;

        List<RaycastResult> list = new List<RaycastResult>();

        RaycastInCanvas.Raycast(eventData, list);

        //Debug.Log(list.Count);

        return list.Count > 0;

    }

原理大概就是点击的时候判断下是否有UI层并返回响应UI层raycasttarget的组件个数,

这个数量是根据窗口 MaskBG蒙板上 raycasttarget 是否开启来判断

这里顺便说一句,由于项目需求,我们这里非全屏UI一般都有层半透mask(全屏是BG),这个会开启raycasttarget选项,简单粗暴防点穿,其他的除了button 超链接文本 rawimag在模型展示的时候会开启,其余都是关闭状态,否则有一定检测消耗,具体可以看米忽悠大佬整理的,这里不讨论

上面的代码就很简单 如果true 说明有UI层级挡住,ray射线相关操作失效,UI层正常,

false就说明没UI阻挡. 暂时就说到这里


分割线


今天测试报了个bug,还是点穿了,是因为我们ui分了很多层

项目目前的ui层级

之前加了GraphicRaycaster 的在main层,但是pop层也有公用窗口,不可能这个公用窗口加上GraphicRaycaster ,所以上面的方法不行,被点穿,参考了这位兄弟的文章,解决了,具体的可以看他的文章解决,大概原理就是先判断手指数量,需要注意pc和真机的区别

相关文章

  • Unity不让射线在UI开启时响应

    最近slg项目中有个需求,场景中有地块,给武将上阵,同时支持拖动,点击等基本操作,同时又要打开UI替换武将,需要处...

  • UI射线部分执行逻辑

    射线底层实现逻辑,Ui射线最重要的部分就是GraphicRaycaster。 射线响应方法,具体实现逻辑如下

  • UGUI射线穿透问题解决方案

    在unity项目里3D场景中如果有用到射线的,鼠标点击UI会发生UI会被穿透,导致3D场景里的射线触发。举个例子:...

  • Unity IsPointerOverGameObject的一个

    需求 如果希望点击一个物体但是希望隔离UI,当点击到UI时不响应物体的事件,那么一般的做法都是使用Unity自带的...

  • Unity 射线

    1,摄像机射线: 2, 物体发射射线: 3, 点击发出射线:

  • Unity射线

    射线 与现实中激光手电(激光笔)类似,射线的两个要素:原点和方向。unity引擎引入了这种机制,可以通过代码在场景...

  • unity项目防止快速连续点击按钮UI

    在unity项目中我们经常遇到这种情况:当我们点击一个按钮UI后会等待网络响应或者等待资源加载,这个时候我们不希望...

  • unity 蓝图模式和原始编辑模式

    开启蓝图模式 点击RectTransform组件下面的虚线框开启蓝图模式 蓝图模式作用 可以固定UI对象的响应区域...

  • unity 射线过滤

    刚刚看了官方文档,推荐layers来做我直接翻译了一下官方文档这个是官方文档链接 https://docs.uni...

  • Unity 基础 - 射线

    Unity 中虚拟射线能够检测所碰撞到物体,使用 Physics 类的 Raycast 方法实现色心啊碰撞检测功能。

网友评论

      本文标题:Unity不让射线在UI开启时响应

      本文链接:https://www.haomeiwen.com/subject/pnvgpctx.html