取消勾选RaycastTarget,优化UGUI效率

无意间发现了一个小技巧。如下图所示,可以发现UGUI的Image组件的RaycastTarget勾选以后会消耗一些效率,为了节省效率就不要勾选它了,不仅Image组件Text组件也有这样的问题。 一般UI里也就是按钮才需要接收响应事件,那么大部分image和text是是不需要开RaycastTarget的。Unity3D研究院之UGUI一个优化效率小技巧 - 雨松MOMO程序研究院 - 1  但是问题就来了,Unity默认在hierarchy窗口Create->UI->Image 、Text的时候就会自动帮我们勾选上RaycastTarget, 一个复杂点的界面至少也300+个Image和Text, 总不能一个个取消吧。 所以我们可以重写Create->UI->Image的事件。Unity3D研究院之UGUI一个优化效率小技巧 - 雨松MOMO程序研究院 - 2

  这样创建出来的Image就不带 RaycastTarget,Text组件原理同上。 Unity版本5.3.3




看过UGUI源码的朋友一定都知道,UI事件会在EventSystem在Update的Process触发。UGUI会遍历屏幕中所有RaycastTarget是true的UI,接着就会发射线,并且排序找到玩家最先触发的那个UI,在抛出事件给逻辑层去响应。

团队多人在开发游戏界面,很多时候都是复制黏贴,比如上一个图片是需要响应RaycastTarget,然后ctrl+d以后复制出来的也就带了这个属性,很可能新复制出来的图片是不需要响应的,开发人员又没有取消勾选掉,这就出问题了。

所以RaycastTarget如果被勾选的过多的话, 效率必然会低。。这个问题其实困扰了我很久,我终于想了一个还算好的方法解决它。

把下面代码挂在游戏中的任意GameObject上,原理其实很简单就是绘制辅助线,当UI中RaycastTarget发生变化,SceneView中的蓝色辅助线也会刷新,还是挺方便的。(感谢钱钱告诉我的 GetWorldCorners 方法)

如下图所示,这是之前游戏中的一个简单的界面。 在SceneView视图中,我并不知道那些勾选了RaycastTarget,以前的做法需要一个个的去找(这个太麻烦了)

UGUI研究院之有效解决RaycastTarget勾选过多的烦恼(二十三) - 雨松MOMO程序研究院 - 1

如下图所示,加上上面的脚本后,可以在scene试图中直接看到,蓝色框表示的就是勾选过RaycastTarget的UI。

UGUI研究院之有效解决RaycastTarget勾选过多的烦恼(二十三) - 雨松MOMO程序研究院 - 2

有了辅助框后,如下图所示,我就可以很方便的把不需要响应的RaycastTarget去掉即可。

UGUI研究院之有效解决RaycastTarget勾选过多的烦恼(二十三) - 雨松MOMO程序研究院 - 3

 

测试环境 unity5.3.5

Canvas的参数


UGUI研究院之有效解决RaycastTarget勾选过多的烦恼(二十三) - 雨松MOMO程序研究院 - 4

UICamera相机的参数

UGUI研究院之有效解决RaycastTarget勾选过多的烦恼(二十三) - 雨松MOMO程序研究院 - 5

这个脚本无论是运行模式,还是编辑模式都可以看到蓝色的辅助线,的理论上90%的文字或者 非按钮的图片 都是不需要RaycastTarget的。如果大家有什么建议或者想法,欢迎再下面给我留言。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值