与Unity中的自定义UI元素进行交互

时间:2019-05-01 17:27:53

标签: c# unity3d

我在与自定义UI元素交互时遇到问题。我有一个自定义模式窗口,当我将鼠标悬停在对象上时会显示该窗口,然后当鼠标离开模式窗口区域时我想使其消失,但是我找不到解决方法。 Game Objects in the hierarchy and canvas inspector

我在互联网上进行搜索,我尝试过使用raycasters,但是它无法正常工作,或者我做错了事。

这是我将鼠标悬停在对象上时如何调用Script ModalWindowScript的方式,以便可以与UI元素进行交互。

    [SerializeField] GameObject uIModalWindow;
    private void Start()
    { 
        uIModalWindow.SetActive(false);
    }

    private void OnMouseEnter()
    {
        var mousePos = Input.mousePosition;
        Debug.Log(gameObject.name);
        uIModalWindow.transform.position = mousePos;
        uIModalWindow.SetActive(true);
    }

    private void OnMouseExit()
    {
        uIModalWindow.AddComponent<ModalWindowScript>();
    }

预期结果是,当鼠标离开模态窗口区域时,模态窗口将消失。但是实际情况是我找不到如何与UI进行通信。

HoverOverObject ModalWindowScript

1 个答案:

答案 0 :(得分:0)

您需要实现IPointerEnterHandler和IPointerExitHandler接口,以获得此类解决方案以获取适当的事件:

public class HoverOverObject : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler

    [SerializeField] GameObject uIModalWindow;
    private void Start()
    { 
        uIModalWindow.SetActive(false);
    }

    public void OnPointerEnter(PointerEventData e)
    {
        var mousePos = Input.mousePosition;
        Debug.Log(gameObject.name);
        uIModalWindow.transform.position = mousePos;
        uIModalWindow.SetActive(true);
    }

    public void OnPointerExit(PointerEventData e)
    {
        uIModalWindow.AddComponent<ModalWindowScript>();
    }
}

注意更改的代码:添加了接口,更改了方法的名称,将方法的可访问性从私有更改为公共。

相关问题