unity简单示例——去掉所有UI物体的RaycastTarget选项

去掉此选项后游戏会减少射线检测,进而提升游戏性能

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值