【发布时间】:2018-01-07 14:04:31
【问题描述】:
是否有任何方法可以检测在带有事件系统 UI 组件的 UI 元素上单击了哪个鼠标按钮?
我的场景中有对象,其脚本包含 OnMouseDown。单击游戏对象时,我可以检查是否单击了左键或右键:
public void OnMouseDown()
{
if(Input.GetMouseButton(0)) print("clicked left button");
}
但是,这些对象在画布上也有一个 Text 元素,我希望 MouseDown 在单击文本时也能触发。我附加了一个指向 MouseDown 的事件触发器。在这种情况下,print("clicked left button") 永远不会到达。我猜它必须需要一帧才能传递事件数据或其他东西?
我可以将单独的脚本附加到所有 Text 元素并使用 EventSystems 接口 (OnPointerClick(PointerEventData eventData)),但如果可能的话,我希望避免使用额外的脚本。所以,我的问题是:有什么方法可以传递使用Event System component 点击的按钮?
我尝试过的事情:
1) 在 MouseDown 中使用 Input.GetMouseButtonDown 而不是 Input.GetMouseButton(0)
2) 在 MouseDown 中包含PointerEventData 作为参数(导致错误)
3) 使用 EventSystem API:
public void Clicked(PointerEventData p)
{
if (p.button == PointerEventData.InputButton.Left)
{
print("UI Click");
}
}
但是这个空白并没有出现在事件触发器组件的可用函数列表中。
【问题讨论】:
-
你的#3 应该可以工作它有问题吗?