首页 > 解决方案 > 枪口闪光灯打开但没有用 else 语句关闭?

问题描述

所以这行得通

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游戏对象时起作用。

而且我认为唯一不正确的方法是如果没有按住鼠标单击。

所以,在第一个例子中,按下会调用这个对象。但不是释放不会删除对象,而是按下鼠标时对象甚至不显示?

ls 这个对象,但是释放不删除对象?

顺便说一句,这是我的统一项目视图。

图片截图

标签: c#unity3d

解决方案


问题是您使用GetMouseButtonDown而不是GetMouseButton

根据GetMouseButtonDown的文档,该功能

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

虽然GetMouseButton的文档说该功能

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

这意味着在您的代码中, if 仅被调用一帧,然后几毫秒后,您将进入一个新帧。由于在新帧中鼠标按钮没有被按下(它仍然被按住,但刚刚按下的那一刻已经过去了),else 语句被调用,并停止一切。

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


推荐阅读