首页 > 代码库 > 解决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勾选过多的烦恼
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。