我在与自定义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进行通信。
答案 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>();
}
}
注意更改的代码:添加了接口,更改了方法的名称,将方法的可访问性从私有更改为公共。