【问题标题】:Get if Unity UI element is being pressed [duplicate]获取是否按下 Unity UI 元素 [重复]
【发布时间】:2017-08-29 17:32:20
【问题描述】:

我知道 Unity 中的 EventTrigger 实用程序,目前使用它来检查屏幕是否“被按下”:

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

但问题在于,在关卡加载时,触发器不会收到OnPointerUp 的通知,并且玩家被卡在跳跃中。

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

我查看了EventTrigger 系统,但没有找到我想要的。

编辑

我介绍的两种方法分别连接到gameobjectEventTriggerOnPointerUpOnPointerDown。我在这里写的代码确实有效,但我需要一个更可靠的解决方案,一个可能使用轮询的解决方案(例如,从FixedUpdate() 调用以获取更新)。

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

引擎必须在每次指针向上时通知,以免卡住 - 在我的情况下 - 在跳跃中。现在,手机游戏中有些情况不会发生这种情况:

  • 用户在手持设备时不小心触摸了屏幕
  • 滞后/卡顿,可能不是由于应用程序本身,而是设备上发生的任何其他问题
  • 关卡加载、广告加载

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

下面是代码与EventTrigger的连接方式:

【问题讨论】:

  • 您或其他人在几天前问过这个确切的问题,它被标记为重复。我再给你指出,没有PointerDownPointerUp。有OnPointerDownOnPointerUp。修复该问题并重试,您的代码应该可以工作。
  • 我解释得不够清楚,但我将这两种方法与OnPointerUpEventTrigger 中可用的方法联系起来。我编写的这段代码有效,但很脆弱,我正在寻找一种基于轮询的方式来做同样的事情。
  • EventTrigger 捕获所有缓慢的事件。不这样做的正确方法是从脚本中实现IPointerDownHandlerIPointerUpHandler,然后使用OnPointerDownOnPointerUp 函数。有关示例,请参阅this。它应该附加到每个对象上,然后有一个公共的非静态布尔变量可以在它们上使用。
  • 你给了我很多阅读和实现的内容:D 现在检查一下。
  • 是的,这听起来像是要走的路。你知道 Unity,就像你是它的首席架构师一样:D

标签: c# unity3d


【解决方案1】:

您缺少参数并且命名错误。 请查看统一脚本参考以获取更多信息。

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

public void OnPointerUp(PointerEventData eventData){
}

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

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

Input.GetTouch

这些触摸事件包含“阶段”,告诉您触摸是刚刚开始还是被释放等。因此您可以使用此事件的触摸位置并检查它是否与您的 UI 元素重叠。如果它重叠并且被按下,那么你就想跳起来。如果它被释放,你想停止跳起来。 您可以在附加到 ui 组件的脚本的更新方法中检查这一点。

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

更新2 你可以使用RectTransformUtility.ScreenPointToLocalPointInRectangle 来确定你的触摸事件是否命中了你的 UI 元素。

【讨论】:

  • 谢谢,但刚刚更新了问题。由于编辑中写的原因,我的代码有效,我只需要一个更稳定的解决方案。
  • 用替代解决方案编辑了我的答案
  • 谢谢,我自己搞砸了GetTouch,看看它能做什么。
  • 更新了更多以获得另一个提示。希望对你有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多