我了解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
:
答案 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查找。