Android上触摸释放时OnPointerExit()触发的解决方案?

Android上触摸释放时OnPointerExit()触发的解决方案?,android,unity3d,touch,mouseevent,Android,Unity3d,Touch,Mouseevent,我已经为我的Android游戏创建了一些自定义的径向菜单按钮。当触摸带有菜单的游戏对象时,将显示径向菜单。我使用鼠标事件来激活菜单,它在Unity中工作,在Android上也可以。当菜单处于活动状态时,您可以将鼠标或鼠标滑动到菜单项上进行选择。如果随后释放该菜单项,它将把选择传递到radial菜单,然后radial菜单将采取适当的操作 以下工作是统一的: public void OnPointerEnter (PointerEventData eventData) { myMenu.se

我已经为我的Android游戏创建了一些自定义的径向菜单按钮。当触摸带有菜单的游戏对象时,将显示径向菜单。我使用鼠标事件来激活菜单,它在Unity中工作,在Android上也可以。当菜单处于活动状态时,您可以将鼠标或鼠标滑动到菜单项上进行选择。如果随后释放该菜单项,它将把选择传递到radial菜单,然后radial菜单将采取适当的操作

以下工作是统一的:

public void OnPointerEnter (PointerEventData eventData)
{
    myMenu.selected = this;
    Debug.Log ("Menu selection is now: " + this.action.ToString ());
    defaultColor = circle.color;
    circle.color = Color.white;
}

public void OnPointerExit (PointerEventData eventData)
{
    myMenu.selected = null;
    Debug.Log ("Menu selection has been nulled out.");
    circle.color = defaultColor;
}
然而,当构建到Android时,它不能正常工作。通过一些调试测试,我确定在Unity中,如果我激活菜单并将鼠标移到菜单项上,然后释放鼠标,则myMenu.selected被正确分配。然而,仅在Android上,将手指举过菜单项会处理最后的OnPointerExit,这会将其置空,这意味着菜单永远不会得到正确的选择。鼠标不会以这种方式运行,它不会在释放鼠标按钮时将指针视为已退出


我可以通过将所有东西切换到触摸来解决这个问题,但是我无法使用Unity播放器和我的鼠标进行测试。到目前为止,所有通过鼠标的操作都可以通过触摸正常工作。这是我遇到的第一个问题。有没有干净的解决办法?或者,使用宏来确定我是否在编辑器中并且每个编辑器都有单独的鼠标和触摸代码是最好的解决方案?

这取决于您试图实现的行为

触摸输入没有悬停的概念,因此您可能应该使用IPointerClickHandler接口和/或IPointerDownHandler和IPointerUpHandler接口


如果您的悬停代码周围没有悬停逻辑,我建议使用预处理器指令将悬停逻辑与触摸/点击分开。

没有悬停逻辑。我使用的是InterenterHandler和ExitHandler。逻辑如下:-触摸对象打开菜单。-触摸首选菜单项时滑动。-滑动菜单项将首选菜单项设置为空无选择。-在该菜单项上释放时将其选中。问题是,在Android上,而不是在播放器上,在菜单项上释放时将其视为退出。不过,我认为你的解决方案仍然有效,那就是使用预处理器指令来使用触摸,而不是独立外部的鼠标事件,以实现可预测性。似乎你的评论中缺少了一些东西。如果您将问题编辑为包含其余的交互代码,则会有所帮助。