UGUI中常用的可以响应的鼠标事件的组件包括Button、Toggle、Slider、InputField、ScrollView等。而它们能够响应鼠标事件的前提之一就是组件中包含勾选了Raycast Target物体(通常这类物体一般是Image、RawImage、Text这种基本组件)。以Button为例:
默认Button中包含了一个Image组件和一个Text组件,只要其中一个勾选Raycast Target,那么这个Button就可以响应鼠标事件。
UGUI的鼠标事件是通过射线检测实现的。当点击鼠标时,Unity会遍历当前勾选了Raycast Target的所有组件,找到最上层的组件来作为当前点击的响应点。所以场景中勾选Raycast Target的组件太多的话,就会降低游戏运行效率。
然而Unity在创建Image、RawImage、Text等基本组件时是会默认勾选Raycast Target选项的,如果到了项目后期,逐个组件检查是非常麻烦的。因此可以重写创建方法,在创建时不勾选Raycast Target选项。这样就可以避免UI中出现无用的勾选了Raycast Target组件,以Image为例:
[MenuItem("GameObject/UI/Image")]
static void CreatImage()
{
GameObject go = new GameObject("Image", typeof(Image));
go.GetComponent<Image>().raycastTarget = false;
if (Selection.activeTransform)
{
if (Selection.activeTransform.GetComponentInParent