当鼠标悬停在UI按钮上时,更改UI按钮的源图像? (统一)

时间:2017-07-13 20:21:33

标签: c# user-interface button unity3d unity3d-2dtools

您好我是Unity的新手,我试图让鼠标悬停在其上时更改其源图像的UI按钮,当鼠标不再在按钮上时,按钮&#39 ; s源图像恢复正常。我知道精灵需要是按钮的源图像,所以我创建了两个图像精灵文件(一个是普通图像,另一个是当鼠标悬停在按钮上时点亮图像)

现在这里是播放按钮的屏幕截图,其中包含正常的源图像

enter image description here

当鼠标移过时,按钮将通过点亮来改变其源图像

enter image description here

如何在C#中执行此任务?当鼠标悬停在C#上时,如何更改C#按钮的源图像?

这是我在查看一些参考资料后到目前为止所得到的。我是Unity的新手,对于我缺乏知识感到抱歉

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PlayButton : MonoBehaviour {

    private PlayButton pb;
    private Sprite newSprite;

    // Use this for initialization
    void Start () {
        pb = GetComponentInChildren<PlayButton> ();
    }

    // Update is called once per frame
    void Update () {

    }

    public void onClick(){

    }

    public void onPointerHover(PointerEventData eventData){
        //When mouse hovers over the button, the button changes
        pb.image.overrideSprite = newSprite;
    }
 }

1 个答案:

答案 0 :(得分:2)

没有onPointerHover之类的东西。检测鼠标超过使用OnPointerEnter。要检测鼠标何时存在鼠标,请使用OnPointerExit。您必须实施IPointerExitHandlerIPointerEnterHandler才能使用这些功能。

您阅读了更多示例here

至于更改按钮的源图像,可以使用Button.image.spriteButton.image.overrideSprite来执行此操作。

只需将Button Object附加:

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class PlayButton : MonoBehaviour, IPointerExitHandler, IPointerEnterHandler
{
    private Button pb;
    public Sprite newSprite;

    void Start()
    {
        pb = GetComponent<Button>();
    }

    public void OnPointerEnter(PointerEventData eventData)
    {
        pb.image.sprite = newSprite; ;
        Debug.Log("Mouse Enter");
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        Debug.Log("Mouse Exit");
        //Change Image back to default?
    }
}

修改

请注意,您不必自己动手。 Unity已经建立了这样做的方式。

1 。将按钮的转换选项从“Color Tint”更改为“Sprite Swap”

2 。更改“突出显示的精灵”插槽,您想要的精灵。

enter image description here