2017-04-11 85 views
1

現在我在Unity上使用C#進行2D射擊遊戲,並且當它獲得加電項目時,我想增加5秒的發射速率。它有點不錯,但是當船開機時,火焰速率不會改變,直到按鈕被釋放並再次按下。即使在按下按鈕時,是否有辦法在啓動時立即更改火率?此外,功率增加功能是我想出來的,如果有更好的方法來開啓功能,那也是非常有用的。感謝提前:)按下按鈕時改變點火率

void Update(){ 
    if (Input.GetKeyDown(KeyCode.Space)){ 
     InvokeRepeating("Fire", 0.000001f, fireRate); 
    } 
} 
void PowerUp() 
{ 
    Upgrade = true; 
    timeLeft = +5f; 
    if (Upgrade == true) 
    { 
     fireRate = 0.1f; 
    } 
    if (timeLeft <= 0) 
    { 
     Upgrade = false; 
     fireRate = 0.5f; 
    } 
} 

回答

1

你應該傳遞一個引用類型的Fire協程,而不是float fireRate。

只是包裝fireRate一類應該工作:

class FireData 
{ 
    public float fireRate = 0.1; 
} 

然後在你的腳本,

FireData fireData = new FireData { fireRate = 0.5f }; 
void Update(){ 
    if (Input.GetKeyDown(KeyCode.Space)){ 
     InvokeRepeating("Fire", 0.000001f, fireData); 
    } 
} 
void PowerUp() 
{ 
    Upgrade = true; 
    timeLeft = +5f; 
    if (Upgrade == true) 
    { 
     fireData.fireRate = 0.1f; 
    } 
    if (timeLeft <= 0) 
    { 
     Upgrade = false; 
     fireData.fireRate = 0.5f; 
    } 
} 

Fire()協同程序,使用該fireData.fireRate得到fireRate。

順便說一下,我認爲你的功能已經足夠好了。

但是使用協程的方式是不正確的。不要在相同的函數上多次調用InvokeRepeating

if (Input.GetKeyDown(KeyCode.Space)){ 
    InvokeRepeating("Fire", 0.000001f, fireRate); 
} 

相反,您應該使用bool值來控制火災何時開始。

if (Input.GetKeyDown(KeyCode.Space)){ 
    fireData.Firing = true; 
} 
if(fireData.Firing) 
{ 
    InvokeRepeating("Fire", 0.000001f, fireRate); 
} 

還記得添加一個邏輯來通過StopCoroutine停止射擊。

+0

對不起,我正忙於其他的東西,直到現在我都無法做出改變。也花了我一段時間來了解如何使用協程。 感謝您的幫助和描述性解釋! – Raggy