博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决RaycastTarget勾选过多的烦恼
阅读量:6038 次
发布时间:2019-06-20

本文共 1072 字,大约阅读时间需要 3 分钟。

看过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
()) 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 }

 

转载地址:http://ckghx.baihongyu.com/

你可能感兴趣的文章
服务器定义
查看>>
我的友情链接
查看>>
MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
查看>>
c# 入门 例子
查看>>
HP Designjet 800PS 日常维护
查看>>
rhel7使用fdisk分区时无法使用全部分区的解决办法
查看>>
Docker 清理命令
查看>>
利用NRPE外部构件监控远程主机
查看>>
使用模块化编译缩小 apk 体积
查看>>
router-link传参
查看>>
ios之UISlider
查看>>
短信验证流程
查看>>
php 使用htmlspecialchars() 和strip_tags函数过滤HTML标签的区别
查看>>
OpenCV Error: Assertion failed (data0.dims <= 2 && type == 5 && K > 0) in cv::kmeans
查看>>
python string 之 format
查看>>
树形DP 复习
查看>>
Vuex随笔
查看>>
crontab 不执行
查看>>
避免用for循环写数据
查看>>
Dijkstra(变形) POJ 1797 Heavy Transportation
查看>>