zoukankan      html  css  js  c++  java
  • 解决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 }
  • 相关阅读:
    总结
    ElasticSearch课件1.22
    clickhouse1.0.5
    大数据实时项目(ads层)
    大数据实时项目(dws层)1.2
    大数据实时项目(日活)1.6.1
    01_大数据技术之Spark入门(2.1)
    03_大数据技术之SparkSql(2.0)
    04_大数据技术之SparkStreaming(2.0)
    05_大数据技术之Spark内核解析(1.1)
  • 原文地址:https://www.cnblogs.com/AaronBlogs/p/6815861.html
Copyright © 2011-2022 走看看