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 红框消失了,具体如下图: