unity 针对UI的射线穿透的两种方式


在做背包物品的拖动,以及技能快捷键的拖动设置时,都涉及到了针对UI的射线穿透问题.在处理这两个应用场景时,我采用了不同的UI射线穿透方式.

方法一

主要是用到了 IsRaycastLocationValid(Vector2 sp, Camera eventCamera) 这个函数.具体的介绍请移步官网.

一句话介绍它的主要功能,是用来设置当前脚本所对应的UI是否被射线检测. 因为我针对背包物品拖动所写的脚本是绑定在物品自身的,所以这个函数就很适用啦.

当然,它的主要应用场景不是这个.最常见的是针对不规则图片,以及叠加的图片.下面有两个博文介绍:
针对叠加图片
针对不规则图形

方法二

当你想要拖动的UI图形不是当前脚本所绑定的物体时,该怎么办? 除了重写脚本之外,我们还可以使用 CanvasGroup 组件来控制射线穿透.CanvasGroup 的具体介绍也请移步官网.

CanvasGroup 下的 Block Raycasts 可以用来控制组件对应物体的所有子物体是否被射线穿透.当然,因为它的威力太大,所以最好是用一个不带任何子物体的空物体管理,需要时我们再把UI绑定到该空物体上.

反思

以上是我在学习过程中总结的一点经验.学得越深入,越发现其实所有的问题都是很简单的.比如以上的应用场景,说白了就是针对射线穿透的控制.如果能对API很熟悉,甚至对原理也十分了解,那么解决这种问题就不在话下了.

猜你喜欢

转载自www.cnblogs.com/ChanWunsam/p/10018310.html