枪口闪光灯是否打开,但没有通过else语句关闭?

时间:2018-09-10 06:41:10

标签: c# unity3d

这可行

if (Input.GetMouseButtonDown(0))
{
    _muzzleflash.SetActive(true);
    Ray rayOrigin = Camera.main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0f));
    RaycastHit Hitinfo;
    // cast ray
    if (Physics.Raycast(rayOrigin, out Hitinfo))
    {            
        Debug.Log("hit" + Hitinfo.transform.name);
    }
}

但这不起作用吗?

if (Input.GetMouseButtonDown(0))
{
    _muzzleflash.SetActive(true);
    Ray rayOrigin = Camera.main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0f));
    RaycastHit Hitinfo;
    // cast ray
    if (Physics.Raycast(rayOrigin, out Hitinfo))
    {            
        Debug.Log("hit" + Hitinfo.transform.name);
    }
}
else
{
    _muzzleflash.SetActive(false);
}

那是为什么?

我的想法是GetMouseButtonDown(0)可以在按下该按钮然后调用我的_muzzleflash游戏对象时起作用。

我认为唯一的不正确的方法就是不按住鼠标单击。

因此,在第一个示例中,按下会调用此对象。但是释放不不会删除对象,但是按下鼠标时对象甚至不显示吗?

可以放这个对象,但是释放不会移除该对象?

这是我的统一项目视图。

image screenshot

2 个答案:

答案 0 :(得分:1)

问题是您使用GetMouseButtonDown而不是GetMouseButton

根据GetMouseButtonDown的文档,函数

  

在用户按下给定鼠标键的帧期间返回true。

GetMouseButton的文档说该函数

  

返回是否按住给定的鼠标按钮。

这意味着在您的代码中,if仅被调用一帧,然后在几毫秒后被称为新帧。由于在新框架中没有按下鼠标按钮(它仍然处于按下状态,但是刚刚被按下的那一刻已经过去了),因此将调用else语句,并停止所有操作。

要获得所需的行为(按住鼠标时该功能必须仍然为真),请使用GetMouseButton

答案 1 :(得分:0)

您可以使用input.getmousebuttonup()来设置active false ... 其他明智的方法是使用invoke方法将active设置为false