【发布时间】: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