Unity移动操纵杆OnPointerUp导致错误

时间:2016-10-30 15:40:16

标签: c# android mobile unity3d

我正在试图找出如何检测用户是否有手指在UI操纵杆上,即使他没有移动它(水平和垂直轴都返回零)。我在标准资源操纵杆脚本中找到了这些OnPointerDownOnPointerUp方法,我可以使用它们。通过这段脚本,我能够检测到操纵杆何时被按下以及何时按下结束:

public void OnPointerUp(PointerEventData data)
{
    transform.position = m_StartPos;
    UpdateVirtualAxes(m_StartPos);

    // line below causes the error
    if (data.pointerEnter.name == "MobileJoystick_right") {
        rightJoystickPressed = false;
    }
}

public void OnPointerDown(PointerEventData data) {
    if (data.pointerEnter.name == "MobileJoystick_right") {
        rightJoystickPressed = true;
    }
}

正如我所说的一切正常但是如果我将操纵杆拖离原点并释放它我会收到此错误:

NullReferenceException: Object reference not set to an instance of an object
UnityStandardAssets.CrossPlatformInput.Joystick.OnPointerUp (UnityEngine.EventSystems.PointerEventData data) (at Assets/Standard Assets/CrossPlatformInput/Scripts/Joystick.cs:105)
UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerUpHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:45)
UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerUpHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:269)
UnityEngine.EventSystems.EventSystem:Update()

只有当我将操纵杆远离原点而不是移动时才会发生这种情况(我已将移动范围设置为100),然后将其释放。不知道为什么会这样。需要明确的是:如果我拖动操纵杆让我们从它的原点说80(某些单位)并释放操纵杆一切都很好。但是,如果我拖动操纵杆,让我们说原点150个单位并释放它,我得到上面的错误。

1 个答案:

答案 0 :(得分:0)

通过更改数据解决了这个问题。 pointerEnter .name ==" MobileJoystick_right"数据。 rawPointerPress .name ==" MobileJoystick_right"。