为什么 Rigidbody 上的 OnMouseDown() 事件没有触发?

Why the OnMouseDown() event on Rigidbody does not fire?

有一个可以用鼠标启动的动态刚体body。但在某些时候,Rigidbody 出于某种原因停止对鼠标做出反应。刚性body的速度为0。

到刚性body附加两个Spring关节。

唤醒body的唯一方法是在调试时禁用和re-enableSpring关节。

public class Ball : MonoBehaviour
{

private Rigidbody2D rigidbodyBall;
public SpringJoint2D[] springJoints;

private GameObject speed;

public static Ball instance = null;

#region Life Cycle

void Awake()
{
    speed = GameObject.Find("Velocity");
    springJoints = GetComponents<SpringJoint2D>();
    rigidbodyBall = GetComponent<Rigidbody2D>();
    gameManager = GameObject.Find("GameManager").GetComponent<GameManager>();
}

private bool clickedOn = false;
void Update()
{
    if (clickedOn)
    {
        Dragging();
        UIManager.instance.pauseButton.SetActive(false);
        UIManager.instance.totalScoreUI.gameObject.SetActive(false);
    }
    else
    {
        UIManager.instance.pauseButton.SetActive(true);
        UIManager.instance.totalScoreUI.gameObject.SetActive(true);
    }
}

#endregion

#region Launcher

#region Mouse

void OnMouseDown()
{
   SpringJointDeactivate();
   clickedOn = true;
}

void OnMouseUp()
{
    SpringJointActivate();
    clickedOn = false;
    SetKinematicState(false);
    Invoke("SpringJointDeactivate", 0.1f);
}

void Dragging()
{
    Vector3 mouseWorldPointStart = transform.position;
    Vector3 mouseWorldPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);

    mouseWorldPoint.z = 0f;

    if (Boundary.ballInBoundary)
    {
        transform.position = mouseWorldPoint;

        float diffX = mouseWorldPoint.x - mouseWorldPointStart.x;
        //TODO
        for (int i = 0; i < springJoints.Length; i++)
        {
            springJoints[i].connectedAnchor = new Vector2(springJoints[i].connectedAnchor.x + diffX, springJoints[i].connectedAnchor.y);
        }
    }
    else
    {
      Debug.Log("Another situation!");
      Debug.Log(Boundary.ballInBoundary);
    }

}


#endregion

public void SpringJointActivate()
{
    foreach (SpringJoint2D joint in springJoints)
    {
        joint.enabled = true;
    }
}
public void SpringJointDeactivate()
{
    foreach (SpringJoint2D joint in springJoints)
    {
        joint.enabled = false;
    }
}
public Vector3[] GetSpringJointsConnectedAnchorCoord()
{
    Vector3[] springJointsCoord = new[] { Vector3.zero, Vector3.zero };

    for (int i = 0; i < springJoints.Length; i++)
    {
        springJointsCoord[i] = springJoints[i].connectedAnchor;
    }

    return springJointsCoord;
}

#endregion

public void SetKinematicState(bool kinematicState)
{
    rigidbodyBall.isKinematic = kinematicState;
}

}

这是什么原因?如何纠正?

将 OnMouseDown() 替换为 Input.GetMouseButtonDown(0),一切正常。

void Update()
{
if (Input.GetMouseButtonDown(0))
{
    SpringJointDeactivate();
    clickedOn = true;
}

if (Input.GetMouseButtonUp(0))
{
    SpringJointActivate();
    clickedOn = false;
    SetKinematicState(false);
    Invoke("SpringJointDeactivate", 0.1f);
}
}