Unity移动操纵杆OnPointerUp导致错误

本文关键字:错误 OnPointerUp 移动 操纵杆 Unity | 更新日期: 2023-09-27 18:15:30

我想知道如何检测用户是否有一个手指在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单位,然后松开它,我就会得到上面的错误。

Unity移动操纵杆OnPointerUp导致错误

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