专栏首页韩东吉的Unity杂货铺Unity杂货铺 1 《一键禁用Component Raycast》

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

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

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

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

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,并且隐藏的对象依然有效

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

本文分享自微信公众号 - 韩东吉的Unity杂货铺(DeveloperJimin)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 零基础入门 33:快捷键清除日志

    很多时候大家在调试期间会有很多很多的日志输出,每次都需要点击Console窗口上的clear来清除日志信息着实麻烦,而且逼格很低,今天给大家带来一篇通过设定自定...

    韩东吉
  • Unity杂货铺 2 《Align View To Selected Object》

    在Unity的GameObject菜单栏中,有针对于Align的快捷键,但是唯独少了Align View To Selected的快捷键,那如果想在Scene窗...

    韩东吉
  • 零基础入门 41:Hierarchy也可以这样玩

    上一篇给大家说了下Inspector如何禁用RectTransform属性修改的做法,今天就来分享下对Hierarchy的另一种操作。

    韩东吉
  • 什么样的代码是好代码?

    关于什么是好代码,软件行业烂大街的名词一大堆,什么高内聚、低耦合、可复用、可扩展、健壮性等等。也有所谓设计6原则—SOLID:

    梁规晓
  • Android中判断当前API的版本号方法

    Android中由于不同版本API会有一些变化,导致一些较早版本可能不支持新的方法,或者某些功能处理过程不太一样,需要判断当前版本然后进行适当的处理。

    砸漏
  • 使用Python操作excel文件

    新人小试
  • React中引入HightCharts五步走~

    xing.org1^
  • Hadoop3.1.1源码Client详解 : Packet入队后消息系统运作之DataStreamer(Packet发送) : 流水线架设 : 创建块

    该系列总览: Hadoop3.1.1架构体系——设计原理阐述与Client源码图文详解 : 总览

    执生
  • [ffffffff0x] Windows认证原理:Kerberos认证

    在之前的文章中,我们介绍了windows域环境的结构和组成部分。本文,我们将介绍域环境中使用的kerberos认证协议,并着手分析认证过程。

    r0fus0d
  • 《ASP.NET Core 微服务实战》-- 读书笔记(第9章)

    或者,如果不希望在命令行中显示传入值,也可以把来自启动环境的环境变量转发到容器内部,只要不传入包含值的等式即可,例如:

    郑子铭

扫码关注云+社区

领取腾讯云代金券