Unity OnMouseUp和OnCollisionEnter同时使用

时间:2018-05-18 16:36:04

标签: c# unity3d

我有一个void OnCollisionEnter(Collision other)void OnMouseUp(),但我希望如果我释放鼠标,则应检查碰撞。所以我想在另一个函数中使用函数。

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

    }
}

当然,这种方式不可能,所以我该怎么办呢?

4 个答案:

答案 0 :(得分:4)

你的措辞有点含糊不清。当你说“释放我的鼠标”时我假设你的意思是“不再持有左键”,如果那是错的让我知道。

您只需在OnCollisionStay()中检查鼠标按钮是否未被按下

void OnCollisionStay(Collision other)
{
    //check if left mouse is not being held down
    if(!Input.GetMouseButton(0))
    {
        //write your collision code here
    }
}

EDIT:已修改,因此它不仅仅适用于碰撞输入/鼠标释放的第一帧。

我更喜欢@ Programmer的答案,通常我会使用这种方法进行碰撞,但我会留下这个以防万一有人觉得它有用。

答案 1 :(得分:4)

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;
}

甚至没有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;
}

答案 2 :(得分:1)

为对手使用单独的子对象,然后在OnMouseUp事件处理程序中启用然后禁用该对象。

答案 3 :(得分:0)

bool mouseReleased = false;
void OnMouseDown() => mouseReleased = false;
void OnMouseUp() => mouseReleased = true;
void OnCollisionEnter()
{
    if(mouseReleased)
    {
        mouseReleased = false;
        // Do something
    }
}