首页 > 解决方案 > 如何在 Unity3D 中使按钮的可选区域更小?

问题描述

在 Unity3D 中,我有一个按钮对象,它有一个孩子的图像。到目前为止,一切都很好。

Unity3D-GUI

现在我想让按钮的可选区域(命中区域)小于子图像的大小。那可能吗?我知道可以创建更大的命中区,但不知道何时可以减小它。

是否有可用的脚本使命中区域小于子图像?

该脚本附加到我的按钮上,该按钮交换子图像(悬停时),但命中区域仍然具有与子图像相同的大小(我希望它更小):

class BtnSwapImage : MonoBehaviour, IPointerExitHandler, IPointerEnterHandler
{
private Image image;
private Sprite imgPlayHover, imgPlay;
private Transform _obj;

void Start() {
    imgPlayHover = Resources.Load <Sprite>("GUI/gui_main_btnplayhover_720p");
    imgPlay = Resources.Load <Sprite>("GUI/gui_main_btnplay_720p");

    IterateChildren(this.transform);
}

void IterateChildren(Transform trans)
{
    // Debug.Log(trans.name); // Do whatever logic you want on child objects here
    if (trans.childCount == 0) return;

    foreach(Transform obj in trans)
    {
        if (obj.name == "Image") _obj = obj;
        IterateChildren(obj);
    }
}

public void OnPointerEnter(PointerEventData eventData)
{
    Debug.Log ("OnPointerEnter");
    this._obj.GetComponent<Image>().sprite = imgPlayHover;
}

public void OnPointerExit(PointerEventData eventData)
{
    Debug.Log ("OnPointerExit");
    this._obj.GetComponent<Image>().sprite = imgPlay;
}
}

标签: c#imageunity3duser-interfacebutton

解决方案


不需要脚本:

在按钮的当前图像组件上设置RaycastTarget为,false因此这些不被视为交互区域。

如果您希望 Unity 将图像视为光线投射的目标,请启用光线投射目标。

这有点像你会禁用它的对撞机。

然后只需添加一个完全透明的新子图像组件,并在该组件上启用,RaycastTarget因此这是此按钮的唯一组件,它现在根据矩形变换中的比例定义交互矩形区域。

这个交互式的也可以是按钮本身,它通常也已经有一个Image组件。


推荐阅读