Unity杂货铺 1 《一键禁用Component Raycast》

2019-03-11 15:15:13 浏览数 (1)

今天要分享的主题是在项目优化阶段经常会使用到的一个功能,在UGUI的对象组件中,有一些类似于Image Text等组件,上面自带了一个属性,名为 Raycast Target,用来检测事件接收。

举个例子,如果一个Image上勾选了Raycast Target,在相同位置下有一个Button对象,那么在运行时,该Button是无法接收到正常的点击事件的,因为被Raycast Target遮挡屏蔽了,那实际在项目中,这个功能是有一定的性能消耗的,所以会要求做到只给特定的对象Raycast Target的选项勾选为True。

而默认的组件在创建的时候是True的,或者项目初期没有注意,而到了一定阶段和程度了才开始优化,想要把项目中的raycast进行优化,那就会涉及到一个功能,比如说想一键将多个对象上的Raycast Target进行去除。那该如何做呢?其实很简单,直接上逻辑

代码语言:javascript复制
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.UI;
using System.Linq;
/// <summary>
/// Add By HanDongji
/// </summary>
public class DisableRaycast : MonoBehaviour 
{  
  #region Public Methods    
  [MenuItem("Tools/UI/Disable RayCast")]    
  public static void DisableCompoRaycast()    
  {      
    List<Transform> seletObjs = Selection.transforms.ToList();        
    if(seletObjs.Count <= 0)        
    {          
      EditorUtility.DisplayDialog ("提示", "请选择你要去掉RayCast的对象", "确定");        
    }        
    else        
    {          
      List<Graphic> graphicObjs = new List<Graphic> ();            
      foreach(Transform go in seletObjs)            
      {              
        graphicObjs.Clear ();                
        graphicObjs = go.GetComponentsInChildren<Graphic> (true).ToList ();
                
        if (graphicObjs.Count <= 0)                
        {                  
          Debug.Log ("当前对象: "   go.name   " 不包含Graphic组件,已跳过该对象继续设置");                    
          continue;                
        }
        
        foreach(Graphic item in graphicObjs)                
        {                  
          item.raycastTarget = false;                
        }            
      }            
      Debug.Log ("本次设置Raycast结束");        
    }    
  }    
  #endregion}

在Unity中执行的时候,从菜单栏选择点击后会有以下几张情况,首先,一个对象都不选,会有以下提示

其次如果选择的对象没有Raycast Target对象,也会有文字console提示

完整视频如下(忽略这个视频的黑边,时间实在有限,视频内容主要展示最开始Canvas下组件的Raycast为勾选状态,执行菜单栏后,全部去掉Raycast Target,并且隐藏的对象依然有效

好了,今天的分享主要点就是代码区,希望能帮助到需要的小伙伴~

0 人点赞