前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity杂货铺 1 《一键禁用Component Raycast》

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

作者头像
韩东吉
发布2019-03-11 15:15:13
1.3K0
发布2019-03-11 15:15:13
举报

今天要分享的主题是在项目优化阶段经常会使用到的一个功能,在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,并且隐藏的对象依然有效

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 韩东吉的Unity杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档