Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Unity3D中缩小按钮的可选区域?_C#_Image_Unity3d_User Interface_Button - Fatal编程技术网

C# 如何在Unity3D中缩小按钮的可选区域?

C# 如何在Unity3D中缩小按钮的可选区域?,c#,image,unity3d,user-interface,button,C#,Image,Unity3d,User Interface,Button,在Unity3D中,我有一个按钮对象,它有一个作为子对象的图像。到目前为止还不错 现在我想使按钮的可选区域(点击区域)小于子图像的大小。可能吗?我知道有可能创造一个更大的命中区域,但不知道当你想减少它时是否可能 是否有可用的脚本使命中区域小于子图像 此脚本附加到“我的”按钮,该按钮交换子图像(当鼠标悬停在上方时),但命中区域仍与子图像大小相同(我希望它更小): class BtnSwapImage : MonoBehaviour, IPointerExitHandler, IPointerEn

在Unity3D中,我有一个按钮对象,它有一个作为子对象的图像。到目前为止还不错

现在我想使按钮的可选区域(点击区域)小于子图像的大小。可能吗?我知道有可能创造一个更大的命中区域,但不知道当你想减少它时是否可能

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

此脚本附加到“我的”按钮,该按钮交换子图像(当鼠标悬停在上方时),但命中区域仍与子图像大小相同(我希望它更小):

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;
}
}
BtnSwapImage类:单行为、IPointerExitHandler、IPointerEnterHandler
{
私有图像;
私人精灵imgPlayHover,imgPlay;
私有变换;
void Start(){
imgPlayHover=Resources.Load(“GUI/GUI\u main\u btnplayhover\u 720p”);
imgPlay=Resources.Load(“GUI/GUI\u main\u btnplay\u 720p”);
迭代儿童(this.transform);
}
void IterateChildren(Transform trans)
{
//Debug.Log(trans.name);//在这里对子对象执行您想要的任何逻辑
if(trans.childCount==0)返回;
foreach(trans中的转换对象)
{
如果(obj.name==“Image”)\u obj=obj;
迭代儿童(obj);
}
}
公共void OnPointerEnter(pointereventdataeventdata)
{
Log(“OnPointerEnter”);
这是._obj.GetComponent().sprite=imgPlayHover;
}
公共void OnPointerExit(pointereventdataeventdata)
{
Log(“OnPointerExit”);
这是._obj.GetComponent().sprite=imgPlay;
}
}
无需脚本:

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

启用RaySCAPE目标,如果要统一考虑图像为光线投射的目标。

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

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


这个交互式按钮也可能是按钮本身,它通常也有一个
图像
组件。

Ah。谢谢,我会尽快试一试的DIt有效!:)在按钮上启用了RayCastTarget,在子图像上禁用了RayCastTarget!谢谢你救了我一天!:)