Unity UGUI

RaycastTarget:是否标记为光线投射目标

:勾选表示鼠标点击到该物体后不再穿透到下面的物体

                          :取消勾选则穿透该物体

  在拼UI的过程中往往会添加很多图片和文字,但是很容易会忽略的其中一点就是把无用的RaycastTarget去掉,因为开启此选项,组件虽然不需要接受射线,但是它依然在工作且消耗性能。

 

  RaycastTarget 如果被勾选的过多的话, 效率必然会低;编辑状态下,便捷的方式查看UI交互包含 RayCastTarget 的UI元素,快速定位勾选取消不必要的UI交互,从而提高效率。

方法具体如下:

  在场景中添加两个 Image 和 一个 Button UI 元素,其中取消一个 Image 的Raycast Target

   创建相关脚本,脚本的代码和代码说明如下:

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4 using UnityEngine.UI;
 5 
 6 public class RaycastTargetOrientation : MonoBehaviour
 7 {
 8     // 定义一个静态变量保存UI四个角点位置信息
 9     private static Vector3[] UIFourCorners = new Vector3[4];
10 
11     private void OnDrawGizmos()
12     {
13         // 获取所有 UI元素
14         MaskableGraphic[] maskableGraphics = GameObject.FindObjectsOfType<MaskableGraphic>();
15         // 遍历所有元素
16         foreach (MaskableGraphic mg in maskableGraphics)
17         {
18             // 如果元素勾选 raycastTarget,则进行划线显示
19             if (mg.raycastTarget == true)
20             {
21                 RectTransform rect = mg.transform as RectTransform;
22                 rect.GetWorldCorners(UIFourCorners);
23                 Gizmos.color = Color.red;
24 
25                 for (int i = 0; i < 4; i++)
26                 {
27                     Gizmos.DrawLine(UIFourCorners[i], UIFourCorners[(i + 1) % 4]);
28                 }
29             }
30         }
31     }
32 
33 }

  脚本编译正确,回到Unity,在场景中添加一个 GameObject,并挂载上脚本,在Scene窗口即可看到勾选 Raycast Target的UI元素被红框标记,具体如下图:

  再次取消另一个不必要有交互的 Image 的 Raycast Target,在Scene窗口即可看到她的UI 红框消失了,具体如下图:

原文地址:https://www.cnblogs.com/ChenZiRong1999/p/12888249.html