获取是否正在按下Unity UI元素

时间:2017-08-29 17:32:20

标签: c# unity3d

我了解Unity中的EventTrigger实用程序,目前正在使用它来检查屏幕是否被按下":

public static bool JUMP;
public void PointerDown()
{
    JUMP = true;
}
public void PointerUp()
{
    JUMP = false;
}

然而,问题在于,在级别加载时,触发器未被通知OnPointerUp且玩家陷入跳跃状态。

因此,当我按下UI元素时,我正在寻找基本上返回true 的解决方案,否则返回false ,可能使用{{1 }}。所以基本上polling仅适用于UI元素和触摸屏。

我查看了GetMouseButton系统,但没有找到我之后的内容。

修改

我提供的两种方法分别与EventTrigger gameobject的{​​{1}}和EventTrigger相关联。我在这里写的代码实际上有效,但我需要一个更可靠的解决方案,可能使用轮询(例如从OnPointerUp调用以获得更新)。

为什么这对我或其他任何人来说都不够可靠

每次指针启动时都必须通知引擎 ,以免在跳跃时卡住(在我的情况下)。现在,在某些手机游戏中,这种情况并没有发生:

  • 用户在拿着设备时意外触摸屏幕
  • 滞后/口吃,可能不是因为应用程序本身,而是设备上发生的任何其他事情
  • 级别加载,广告加载

为了测试目的,我搞砸了应用程序,发现如果以这种方式使用我提出它实际上并不难让角色卡住 - 在我的情况下 - 跳跃。

以下是代码如何连接到OnPointerDown

image

1 个答案:

答案 0 :(得分:2)

您缺少参数,但命名错误。 有关详细信息,请查看统一脚本参考。

public static bool JUMP;
public void OnPointerDown(PointerEventData eventData){
    JUMP = true;
}

public void OnPointerUp(PointerEventData eventData){
}

Unity Scripting参考: https://docs.unity3d.com/ScriptReference/UI.Selectable.OnPointerUp.html

<强>更新 如果你不想使用OnPointerUp / Down方法。另一种解决方案是使用

  

Input.GetTouch

这些触摸事件可以保持&#34;阶段&#34;告诉你触摸是刚刚开始,还是被释放等等。所以你可以使用这个事件的触摸位置并检查它是否与你的UI元素重叠。如果它重叠并被按下,那么比你想跳起来要好。如果它被释放你想要停止跳起来。 您可以在附加到ui组件的脚本的更新方法中检查它。

https://docs.unity3d.com/ScriptReference/Input.GetTouch.html

<强> UPDATE2 如果您的触摸事件触及UI元素,则可以使用RectTransformUtility.ScreenPointToLocalPointInRectangle查找。