参考链接:

http://www.manew.com/thread-100366-1-1.html

https://www.jianshu.com/p/3082ebf8a342

https://blog.csdn.net/serenahaven/article/details/80972601

1.RaycastTarget的检测

 using UnityEngine;
using UnityEngine.UI; public class DrawRaycastTarget : MonoBehaviour { Vector3[] worldCorners = new Vector3[]; private void OnDrawGizmos()
{
foreach (MaskableGraphic maskableGraphic in FindObjectsOfType<MaskableGraphic>())
{
if (maskableGraphic.raycastTarget)
{
RectTransform rectTransform = maskableGraphic.transform as RectTransform;
rectTransform.GetWorldCorners(worldCorners);
Gizmos.color = Color.red;
for (int i = ; i < ; i++)
{
Gizmos.DrawLine(worldCorners[i], worldCorners[(i + ) % ]);
}
}
}
}
}

效果如下:

2.批量修改RaycastTarget

 using UnityEditor;
using UnityEngine.UI;
using UnityEngine; public class RaycastTargetChecker : EditorWindow
{
private MaskableGraphic[] graphics;
private bool hideUnchecked = false;
private bool showBorders = true;
private Color borderColor = Color.blue;
private Vector2 scrollPosition = Vector2.zero; private static RaycastTargetChecker instance = null; [MenuItem("Tools/RaycastTarget Checker")]
private static void Open()
{
instance = instance ?? EditorWindow.GetWindow<RaycastTargetChecker>("RaycastTargets");
instance.Show();
} void OnEnable()
{
instance = this;
} void OnDisable()
{
instance = null;
} void OnGUI()
{
using (EditorGUILayout.HorizontalScope horizontalScope = new EditorGUILayout.HorizontalScope())
{
showBorders = EditorGUILayout.Toggle("Show Gizmos", showBorders, GUILayout.Width(200.0f));
borderColor = EditorGUILayout.ColorField(borderColor);
}
hideUnchecked = EditorGUILayout.Toggle("Hide Unchecked", hideUnchecked); GUILayout.Space(12.0f);
Rect rect = GUILayoutUtility.GetLastRect();
GUI.color = new Color(0.0f, 0.0f, 0.0f, 0.25f);
GUI.DrawTexture(new Rect(0.0f, rect.yMin + 6.0f, Screen.width, 4.0f), EditorGUIUtility.whiteTexture);
GUI.DrawTexture(new Rect(0.0f, rect.yMin + 6.0f, Screen.width, 1.0f), EditorGUIUtility.whiteTexture);
GUI.DrawTexture(new Rect(0.0f, rect.yMin + 9.0f, Screen.width, 1.0f), EditorGUIUtility.whiteTexture);
GUI.color = Color.white; graphics = GameObject.FindObjectsOfType<MaskableGraphic>(); using (GUILayout.ScrollViewScope scrollViewScope = new GUILayout.ScrollViewScope(scrollPosition))
{
scrollPosition = scrollViewScope.scrollPosition;
for (int i = ; i < graphics.Length; i++)
{
MaskableGraphic graphic = graphics[i];
if (hideUnchecked == false || graphic.raycastTarget == true)
{
DrawElement(graphic);
}
}
}
foreach (var item in graphics)
{
EditorUtility.SetDirty(item);
}
Repaint();
} private void DrawElement(MaskableGraphic graphic)
{
using (EditorGUILayout.HorizontalScope horizontalScope = new EditorGUILayout.HorizontalScope())
{
Undo.RecordObject(graphic, "Modify RaycastTarget");
graphic.raycastTarget = EditorGUILayout.Toggle(graphic.raycastTarget, GUILayout.Width());
EditorGUI.BeginDisabledGroup(true);
EditorGUILayout.ObjectField(graphic, typeof(MaskableGraphic), true);
EditorGUI.EndDisabledGroup();
}
} [DrawGizmo(GizmoType.Selected | GizmoType.NonSelected)]
private static void DrawGizmos(MaskableGraphic source, GizmoType gizmoType)
{
if (instance != null && instance.showBorders == true && source.raycastTarget == true)
{
Vector3[] corners = new Vector3[];
source.rectTransform.GetWorldCorners(corners);
Gizmos.color = instance.borderColor;
for (int i = ; i < ; i++)
{
Gizmos.DrawLine(corners[i], corners[(i + ) % ]);
}
if (Selection.activeGameObject == source.gameObject)
{
Gizmos.DrawLine(corners[], corners[]);
Gizmos.DrawLine(corners[], corners[]);
}
}
SceneView.RepaintAll();
}
}

效果如下:

3.创建UI控件时自动取消RaycastTarget

 using UnityEngine;
using UnityEditor;
using UnityEngine.UI; public class CancelRaycastTarget { [MenuItem("GameObject/UI/Image")]
static void CreatImage()
{
if (Selection.activeTransform)
{
if (Selection.activeTransform.GetComponentInParent<Canvas>())
{
GameObject go = new GameObject("Image", typeof(Image));
go.GetComponent<Image>().raycastTarget = false;
go.transform.SetParent(Selection.activeTransform);
}
}
} [MenuItem("GameObject/UI/Text")]
static void CreatText()
{
if (Selection.activeTransform)
{
if (Selection.activeTransform.GetComponentInParent<Canvas>())
{
GameObject go = new GameObject("Text", typeof(Text));
go.GetComponent<Text>().raycastTarget = false;
go.transform.SetParent(Selection.activeTransform);
}
}
} [MenuItem("GameObject/UI/Raw Image")]
static void CreatRawImage()
{
if (Selection.activeTransform)
{
if (Selection.activeTransform.GetComponentInParent<Canvas>())
{
GameObject go = new GameObject("RawImage", typeof(RawImage));
go.GetComponent<RawImage>().raycastTarget = false;
go.transform.SetParent(Selection.activeTransform);
}
}
}
}

[Unity优化]UI优化(一):RaycastTarget的更多相关文章

  1. [Unity优化]UI优化(三):GraphicRebuild

    参考链接: https://blog.csdn.net/jingangxin666/article/details/80143176 调试过程: 1.修改Image的颜色 2.Graphic.SetV ...

  2. [Unity优化]UI优化(二):Mask组件分析

    参考链接: https://www.sohu.com/a/211665096_99940808 1.Mask组件实现原理 使用模板测试,一方面使Mask对象所在区域的模板缓冲值置为1,另一方面使被Ma ...

  3. Android优化——UI优化(三)使用ViewStub延迟加载

    使用ViewStub延迟加载 1.ViewStub延迟加载 ViewStub是一个不可见的,大小为0的View,最佳用途就是实现View的延迟加载,在需要的时候再加载View,可Java中常见的性能优 ...

  4. Android优化——UI优化(一)优化布局层次

    优化布局层次 1.避免布局镶嵌过深(如下) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi ...

  5. Android优化——UI优化(五) Listview 重用convertView

    1.重用convertView 我们对convertView添加判断,如果存在我们就直接使用,否则初始化一个convertView的实例.(如下图) 2.使用viewHolder 使用viewHold ...

  6. Android优化——UI优化(四) 使用stytle

    使用style替换背景,防止Activity黑色背景闪过 1.原来的布局 <LinearLayout xmlns:android="http://schemas.android.com ...

  7. Android优化——UI优化(二) 使用include标签复用布局

    使用include标签复用布局 - 1.include标签的作用 假如说我下图的这个布局在很多界面都用到了,我该怎么办?每个页面都写一遍的话,代码太冗余,并且维护难度加大. <LinearLay ...

  8. Unity优化方向——优化Unity游戏中的图形渲染(译)

    CPU bound:CPU性能边界,是指CPU计算时一直处于占用率很高的情况. GPU bound:GPU性能边界,同样的是指GPU计算时一直处于占用率很高的情况. 原文:https://unity3 ...

  9. Unity MMORPG游戏优化经验分享

    https://mp.weixin.qq.com/s/thGF2WVUkIQYQDrz5DISxA 今天由Unity技术支持工程师高岩,根据实际的技术支持工作经验积累,分享如何对Unity MMORP ...

随机推荐

  1. 排序算法<No.4>【基数排序】

    由于春节,以及项目要上线的原因,导致这期的算法博文跟进的有点慢,内疚! 今天要介绍的是排序算法中的基数排序(Radix Sort),这类排序也是一个分而治之的排序,是对桶排序的一个升级和改造,也是稳定 ...

  2. 正则匹配获取HTML图片地址,正则匹配获取HTML内容

    //正则匹配获取HTML图片地址preg_match_all('/<img.*?src="(.*?)".*?>/is', $str, $array); if (isse ...

  3. MMU实验

    内存管理单元 MMU介绍:权限管理:地址映射 权限管理:内核->A->B 地址空间各不相同 地址映射:多任务系统也是分时系统 虚拟地址(地址空间)->MMU->物理地址 SDR ...

  4. .net4.0、.net4.5、.net4.6 三者对系统的要求

    net4.0 支持的操作系统 Windows 7, Windows 7 Service Pack 1, Windows Server 2003 Service Pack 2, Windows Serv ...

  5. ubuntu 脚本执行

    1.source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令.该filename文件可以无"执行权限" 注:该命令通常用 ...

  6. java容器Container和组件Component之GUI

    GUI全称Graphical User Interfaces,意为图形用户户界面,又称为图形用户接口,GUI指的就是采用图形方式显示的计算机操作用户界面,打个比方吧,我们点击QQ图标,就会弹出一个QQ ...

  7. [蓝桥杯]ALGO-8.算法训练_操作格子

    题目描述: 问题描述 有n个格子,从左到右放成一排,编号为1-n. 共有m次操作,有3种操作类型: .修改一个格子的权值, .求连续一段格子权值和, .求连续一段格子的最大值. 对于每个2.3操作输出 ...

  8. ALGO-125_蓝桥杯_算法训练_王、后传说(DFS)

    问题描述 地球人都知道,在国际象棋中,后如同太阳,光芒四射,威风八面,它能控制横.坚.斜线位置. 看过清宫戏的中国人都知道,后宫乃步步惊心的险恶之地.各皇后都有自己的势力范围,但也总能找到相安无事的办 ...

  9. Qt学习——QListWidget控件的使用

    转载:GDUTLYP Qt提供QListWidget类列表框控件用来加载并显示多个列表项.QListWidgetItem类就是列表项类. 一般列表框控件中的列表项有两种加载方式: 一种是由用户手动添加 ...

  10. locust -基础框架

    # coding=utf-8from locust import HttpLocust, TaskSet, taskimport requests # 定义用户行为class UserBehavior ...