• 解决RaycastTarget勾选过多的烦恼


    看过UGUI源码的朋友一定都知道,UI事件会在EventSystem在Update的Process触发。UGUI会遍历屏幕中所有RaycastTarget是true的UI,接着就会发射线,并且排序找到玩家最先触发的那个UI,在抛出事件给逻辑层去响应。

    团队多人在开发游戏界面,很多时候都是复制黏贴,比如上一个图片是需要响应RaycastTarget,然后ctrl+d以后复制出来的也就带了这个属性,很可能新复制出来的图片是不需要响应的,开发人员又没有取消勾选掉,这就出问题了。

    所以RaycastTarget如果被勾选的过多的话, 效率必然会低。

    把下面代码挂在游戏中的任意GameObject上,原理其实很简单就是绘制辅助线,当UI中RaycastTarget发生变化,SceneView中的蓝色辅助线也会刷新,还是挺方便的。

     1 using UnityEngine;
     2 using System.Collections;
     3 using UnityEngine.UI;
     4 public class DebugUILine : MonoBehaviour {
     5     static Vector3[] fourCorners = new Vector3[4];
     6     void OnDrawGizmos()
     7     {
     8         foreach (MaskableGraphic g in GameObject.FindObjectsOfType<MaskableGraphic>())
     9         {
    10             if (g.raycastTarget)
    11             {
    12                 RectTransform rectTransform = g.transform as RectTransform;
    13                 rectTransform.GetWorldCorners(fourCorners);
    14                 Gizmos.color = Color.blue;
    15                 for (int i = 0; i < 4; i++)
    16                     Gizmos.DrawLine(fourCorners[i], fourCorners[(i + 1) % 4]);
    17  
    18             }
    19         }
    20     }
    21 }
  • 相关阅读:
    享元模式及php实现
    共享内存
    LCD触屏驱动
    I2C驱动
    C++ & java小结
    使用GlobalKey启动APP
    socketpair通信
    inotify和epoll
    C语言之二叉树
    灯光系统
  • 原文地址:https://www.cnblogs.com/AaronBlogs/p/6815861.html
Copyright © 2020-2023  润新知