首页 > 代码库 > 解决RaycastTarget勾选过多的烦恼

解决RaycastTarget勾选过多的烦恼

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

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

所以RaycastTarget如果被勾选的过多的话, 效率必然会低。

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

 1 using UnityEngine;
 2 using System.Collections;
 3 using UnityEngine.UI;
 4 public class DebugUILine : MonoBehaviour {
 5     static Vector3[] fourCorners = new Vector3[4];
 6     void OnDrawGizmos()
 7     {
 8         foreach (MaskableGraphic g in GameObject.FindObjectsOfType<MaskableGraphic>())
 9         {
10             if (g.raycastTarget)
11             {
12                 RectTransform rectTransform = g.transform as RectTransform;
13                 rectTransform.GetWorldCorners(fourCorners);
14                 Gizmos.color = Color.blue;
15                 for (int i = 0; i < 4; i++)
16                     Gizmos.DrawLine(fourCorners[i], fourCorners[(i + 1) % 4]);
17  
18             }
19         }
20     }
21 }

 

解决RaycastTarget勾选过多的烦恼