在Unity3D / 2D鼠标发布外是不可能的?

时间:2015-04-28 14:28:57

标签: unity3d mouseevent

我正在为我的游戏开发UI。我从简单的播放按钮开始。

当它被触摸时,游戏将开始,但如果用户触摸播放按钮并在播放按钮外释放触摸,则不会发生任何事情。

如何实施此类行动。我尝试使用以下代码,但是OnMouseUp中的语句永远不会执行。

if(Input.GetMouseButtonDown(0)) {

    hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

    if(hit) {

        if(transform.name == hit.transform.gameObject.name) {

            Debug.Log("Button touched");
        }
    }
}else
if(Input.GetMouseButtonUp(0)) {

    //hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

    if(hit)    {

        if(transform.name == hit.transform.gameObject.name) {

            Debug.Log ("touched up over same button.");
        }else {
            Debug.Log ("touched up not over same button.");
        }
    }
}

是否只有当MouseDown被触发时,该按钮上的MouseUp将始终被触发,除非其他游戏对象的其他对撞机被触摸?

在团结论坛中,我被建议在此帖子Mouse released outside is not possible?

上使用UI元素

但是如果我们想对游戏对象应用相同的行为那么呢?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您正在寻找一种方法,不仅可以检测鼠标按钮何时通过GameObject释放,还可以在任何未通过GameObject的地方发布鼠标按钮。您不必将碰撞器添加到场景中的其他所有内容来检测它。

在你的第二个if区块中,你正在登录射线命中的东西,而它击中的东西不是有问题的GameObject。还有一种情况是光线没有任何影响:

if(Input.GetMouseButtonUp(0)) {

    hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

    if(hit && transform.name == hit.transform.gameObject.name) {
        Debug.Log ("touched up over same button.");
    } else {
        Debug.Log ("touched up not over same button.");
    }
}