去掉此选项后游戏会减少射线检测,进而提升游戏性能
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
/****************************************************
作者:cg
功能:RaycastTarget管理(此处如果完全用不到交互,可以将GraphicRaycaster脚本去掉)
*****************************************************/
[CanEditMultipleObjects]
[CustomEditor(typeof(RaycastTargetManager))]
public class RaycastTargetManagerEditor : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
if (GUILayout.Button("取消场景中所有物体的Rct"))
{
RaycastTargetManager.RaycastTargetAllCallOff();
}
if (GUILayout.Button("勾选场景中所有物体的Rct"))
{
RaycastTargetManager.RaycastTargetAllCallOn();
}
}
}
public class RaycastTargetManager:MonoBehaviour
{
void OnDrawGizmos()
{
Vector3[] s_fourCorners = new Vector3[4];
foreach (MaskableGraphic g in GameObject.FindObjectsOfType<MaskableGraphic>())
{
if (g.raycastTarget)
{
RectTransform rectTransform = g.transform as RectTransform;
rectTransform.GetWorldCorners(s_fourCorners);
Gizmos.color = Color.red;
for (int i = 0; i < 4; i++)
Gizmos.DrawLine(s_fourCorners[i], s_fourCorners[(i + 1) % 4]);
}
}
}
public static void RaycastTargetAllCallOff()
{
foreach (MaskableGraphic g in GameObject.FindObjectsOfType<MaskableGraphic>())
{
g.raycastTarget = false;
}
}
public static void RaycastTargetAllCallOn()
{
foreach (MaskableGraphic g in GameObject.FindObjectsOfType<MaskableGraphic>())
{
g.raycastTarget = true;
}
}
}
#endif