unity OnMouseUp 和 OnCollisionEnter 同时

J.K*_*orn 2 c# unity-game-engine

我有一个void OnCollisionEnter(Collision other)and void OnMouseUp(),但我希望它是这样,如果我松开鼠标,则应该检查碰撞。所以我想要另一个函数中的函数。

void OnMouseUp()
{
    void OnCollisionEnter(Collision other)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

当然,这是不可能的,那么我该怎么做呢?

Pro*_*mer 5

OnCollisionEnter 和 OnMouseUp 在一帧中被调用一次,直到您重复该事件或碰撞再次发生为止。您需要一个布尔标志来保证您不会错过任何一个OnMouseUpOnCollisionEnter因为这发生得非常快。

bool collided = false;

void OnMouseUp()
{
    if (collided)
    {
        Debug.Log("Collding while mouse is up");
    }
}

void OnCollisionEnter(Collision other)
{
    collided = true;
}

void OnCollisionExit(Collision collision)
{
    collided = false;
}
Run Code Online (Sandbox Code Playgroud)

或者甚至没有 OnMouseUp

bool collided = false;

void Update()
{
    if ((Input.GetMouseButton(0)) && collided)
    {
        Debug.Log("Collding while mouse is up");
    }
}

void OnCollisionEnter(Collision other)
{
    collided = true;
}

void OnCollisionExit(Collision collision)
{
    collided = false;
}
Run Code Online (Sandbox Code Playgroud)

  • 他们确实如此。唯一的区别是一个是回调函数,另一个只是轮询。每一个只会被称为**一次**。 (2认同)