首页 >国内 > > 正文

Unity UI的射线检测-当前消息

2023-01-28 12:59:18 来源:哔哩哔哩

Unity中UI的射线检测由Graphic Raycaster进行管理。


(资料图片仅供参考)

从上面的代码中可以看出来GraphicRaycaster需要依赖于Canvas组件,而且其中会缓存Canvas上的排序顺序,后面这两个属性会在EventSystem中作为后续事件触发的排序依据。(当然今天我们不研究EventSystem,这里提一下就不管具体是怎么实现的了)

接下来就是GraphicRaycaster是怎么进行的射线检测:

其中eventCamera会根据Canvas组件的渲染模式不同而不同:

foundGraphics其实也是通过var canvasGraphics = GraphicRegistry.GetGraphicsForCanvas(canvas);函数,从canvas中获取下面所有的Graphic组件。

那么这个射线检测接口就很容易理解了:

传入参数canvas(代码里也没用到啊,传进来干啥啊?),事件相机,触发点,Graphic组件,结果List

遍历Graphic,剔除掉组件里没开raycastTarget的、剔除的、深度=-1的,Grapgic没在屏幕里的

检测触发点是否在Graphic内,如果触发成功了,就排一下序然后加到结果列表里

所以其实UI的射线检测只会检测到Graphic组件,如果你想自己定义一个可以接受UI射线检测的组件,那就写一个组件继承Graphic类就可以拉~然后还可以把顶点什么的清了,就会得到一个不会渲染但是会接收射线的组件了,比如:

因为Graphic里定义了material和color,这里把两个SetDirty函数重写保证在修改对应的颜色和材质时不会触发重建导致组件被绘制。如果觉得还是不保准的话,可以考虑重写一下OnPopulateMesh函数,把顶点数据都清了,这样就肯定不会绘制了~

标签: CANVAS unity COLOR LIST

x 广告
x 广告

Copyright ©   2015-2022 华中劳务网版权所有  备案号:京ICP备12018864号-26   联系邮箱:2 913 236 @qq.com