簡體   English   中英

槍口Flash可以打開,但是不能用else語句關閉嗎?

[英]Muzzle Flash turns on but doesnt turn off with else statement?

所以這有效

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游戲對象。

而且我認為,唯一的不正確的方法就是不按住鼠標單擊。

因此,在第一個示例中,按下會調用此對象。 但是釋放不不會刪除對象,但是按下鼠標時對象甚至不顯示嗎?

是這個對象,但是釋放不會刪除該對象?

這是我的統一項目視圖。

圖片截圖

問題是您使用GetMouseButtonDown而不是GetMouseButton

根據GetMouseButtonDown的文檔,該函數

在用戶按下給定的鼠標按鈕的幀期間返回true。

雖然GetMouseButton的文檔說該函數

返回是否按住給定的鼠標按鈕。

這意味着在您的代碼中,if僅被調用一幀,然后在幾毫秒后被稱為新幀。 由於在新框架中沒有按下鼠標按鈕(它仍然處於按下狀態,但是剛剛被按下的那一刻已經過去了),因此將調用else語句,並停止所有操作。

若要具有所需的行為(按住鼠標時該功能必須仍然為true),請使用GetMouseButton

發生的情況是,槍口閃光燈僅在GetMouseButtonDown返回true的單個幀中處於活動狀態,然后由else語句將其設置為false。

實際上,我建議不要使用else語句,而應添加邏輯,使槍口閃光燈在其處於活動狀態100毫秒后保持禁用狀態,或者希望該槍口閃光燈持續運行得很快。

您可以使用input.getmousebuttonup()設置為活動的假...其他明智的使用invoke方法來設置為活動的假

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM