欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > Unity工具—默认取消Image和RowImage的Raycast Target

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

2025/4/3 14:59:55 来源:https://blog.csdn.net/weixin_44165354/article/details/146916969  浏览:    关键词: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置为falseimage.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置为falseimage.raycastTarget = false;
}

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

3、效果

请添加图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词