当前位置: 首页 > news >正文

Unity工具—默认取消Image和RowImage的Raycast Target

以下内容是根据Unity 2020.1.0f1版本进行编写的

1、目的

日常使用Unity的UGUI时,新建Image组件或者RowImage组件默认都会把组件上的Raycast Target属性开启。这个属性是用于射线检测的,当用户点击开启了Raycast Target属性的Image组件后,会用户点击到层级在其下方的物体。
默认关闭Raycast Target属性的好处有很多,可以减少不必要的射线检测,降低GPU压力,防止错误遮挡等。
一般来说,只有需要交互的组件才需要开启Raycast Target属性,例如滑动列表,按钮,或者有需要遮挡的区域。因此,实际上需要开启Raycast Target属性的情况不多,可以实现一个工具,重写生成Image组件和RowImage组件的逻辑,使其生成的时候默认取消勾选Raycast Target属性。

2、实现

请添加图片描述
看UGUI源代码可以知道,UGUI是将全部的入口定义在了MenuOptions类。
接下来就简单了,新建一个脚本放到Editor目录下,照抄就行,然后在获取到的GameObject上获取Image组件(或RawImage组件),然后将组件对应的rayCastTarget属性设置为false即可。
代码:
重写Image:

//重写Create->UI->Image事件
[MenuItem("GameObject/UI/Image", false, 2001)]
static void AddImage(MenuCommand menuCommand)
{
    GameObject go = DefaultControls.CreateImage(MenuOptions.GetStandardResources());
    MenuOptions.PlaceUIElementRoot(go, menuCommand);
    go.GetComponent<RectTransform>().localPosition = Vector3.zero;
    Image image = go.GetComponent<Image>();
    //将raycastTarget置为false
    image.raycastTarget = false;
}

重写Raw Image:
//重写Create->UI->Raw Image事件
[MenuItem("GameObject/UI/Raw Image", false, 2002)]
static void AddRawImage(MenuCommand menuCommand)
{
    GameObject go = DefaultControls.CreateRawImage(MenuOptions.GetStandardResources());
    MenuOptions.PlaceUIElementRoot(go, menuCommand);
    go.GetComponent<RectTransform>().localPosition = Vector3.zero;
    RawImage image = go.GetComponent<RawImage>();
    //将raycastTarget置为false
    image.raycastTarget = false;
}

有一个点要注意,这里用到了MenuOptions类的GetStandardResources方法和PlaceUIElementRoot方法,可以直接将MenuOptions类复制到Editor目录下,复制后需要注释掉全部UGUI控件的入口(例如Text、Image、Button、EventSystem等),因为项目默认已经有一套UGUI引用了。

3、效果

请添加图片描述

相关文章:

  • Vue3入门
  • 智谱大模型(ChatGLM3)PyCharm的调试指南
  • AI大模型从0到1记录学习 day11
  • 三步构建企业级操作日志系统:Spring AOP + 自定义注解的优雅实践
  • Redis的一些高级指令
  • HBase安装与配置——单机版到完全分布式部署
  • 【蓝桥杯】回文字符串
  • 自己用python写的查询任意网络设备IP地址工具使用实测
  • 什么是 继续预训练、SFT(监督微调)和RLHF
  • 【Java/数据结构】Map与Set(图文版)
  • AllData数据中台商业版发布版本1.2.9相关白皮书发布
  • UML 4+1 视图:搭建软件架构的 “万能拼图”
  • zabbix“专家坐诊”第281期问答
  • Logstash开启定时任务增量同步mysql数据到es的时区问题
  • 淘宝搜索关键字与商品数据采集接口技术指南
  • 软考 中级软件设计师 考点知识点笔记总结 day09 操作系统进程管理
  • 自然语言处理(24:(第六章4.)​seq2seq模型的应用)
  • 卸载360壁纸
  • Android开发:support.v4包与AndroidX
  • AI Agent拐点已至,2B+2C星辰大海——行业深度报告
  • 启程回家!神十九轨道舱与返回舱成功分离
  • 人到中年为何腰围变粗?科学家发现腹部脂肪增加的细胞元凶
  • 伊朗内政部长:港口爆炸由于“疏忽”和未遵守安全规定造成
  • 十四届全国人大常委会举行第四十三次委员长会议 ,听取有关草案和议案审议情况汇报
  • 荣盛发展去年亏损约84.43亿元,要“过苦日子、紧日子”
  • 楼下电瓶车起火老夫妻逃生时被烧伤,消防解析躲火避烟注意事项