按下按钮时改变点火率

问题描述:

现在我在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; 
    } 
} 

你应该传递一个引用类型的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