我正在尝试弄清楚如何检测用户是否将手指放在UI操纵杆上,即使他没有移动它(水平和垂直轴都返回零)。我从标准资产操纵杆脚本中找到了这些我可以使用的OnPointerDown和OnPointerUp方法。通过这段脚本,我能够检测到何时按下了操纵杆以及何时按下了键:
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个单位,然后释放它,我会得到上面的错误。
发布于 2016-10-31 03:16:49
通过将data.pointerEnter.name == "MobileJoystick_right“改为data.rawPointerPress.name == "MobileJoystick_right”,解决了此问题。
https://stackoverflow.com/questions/40330721
复制相似问题