获取是不是按下 Unity UI 元素 [重复]
Posted
技术标签:
【中文标题】获取是不是按下 Unity UI 元素 [重复]【英文标题】: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
系统,但没有找到我想要的。
编辑
我介绍的两种方法分别连接到gameobject
的EventTrigger
的OnPointerUp
和OnPointerDown
。我在这里写的代码确实有效,但我需要一个更可靠的解决方案,一个可能使用轮询的解决方案(例如,从FixedUpdate()
调用以获取更新)。
为什么这对我或其他人来说不够可靠
引擎必须在每次指针向上时通知,以免卡住 - 在我的情况下 - 在跳跃中。现在,手机游戏中有些情况不会发生这种情况:
用户在手持设备时不小心触摸了屏幕 滞后/卡顿,可能不是由于应用程序本身,而是设备上发生的任何其他问题 关卡加载、广告加载为了测试目的,我弄乱了应用程序,发现如果以这种方式使用我展示的它实际上并不难让角色卡住 - 在我的情况下 - 跳跃。
下面是代码与EventTrigger
的连接方式:
【问题讨论】:
您或其他人在几天前问过这个确切的问题,它被标记为重复。我再给你指出,没有PointerDown
和PointerUp
。有OnPointerDown
和OnPointerUp
。修复该问题并重试,您的代码应该可以工作。
我解释得不够清楚,但我将这两种方法与OnPointerUp
和EventTrigger
中可用的方法联系起来。我编写的这段代码有效,但很脆弱,我正在寻找一种基于轮询的方式来做同样的事情。
EventTrigger
捕获所有缓慢的事件。不这样做的正确方法是从脚本中实现IPointerDownHandler
和IPointerUpHandler
,然后使用OnPointerDown
和OnPointerUp
函数。有关示例,请参阅this。它应该附加到每个对象上,然后有一个公共的非静态布尔变量可以在它们上使用。
你给了我很多阅读和实现的内容:D 现在检查一下。
是的,这听起来像是要走的路。你知道 Unity,就像你是它的首席架构师一样:D
【参考方案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
,看看它能做什么。
更新了更多以获得另一个提示。希望对你有帮助以上是关于获取是不是按下 Unity UI 元素 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
[Unity 3d] 判断手指/鼠标按下触发在UI上的正确方法