按下按钮时更改射速

Changing the fire rate while button pressed

我现在在使用 C# 的 Unity 上有一个 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 中即可:

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 获取射速。

顺便说一下,我觉得你的power up功能够用了。

但是协程的使用方式并不是correct.Don不要对同一个函数多次调用InvokeRepeating

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

相反,您应该使用布尔值来控制火灾何时开始。

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

还记得通过 StopCoroutine 添加停止触发的逻辑。