按下按钮时更改火焰速率

时间:2017-04-11 00:40:44

标签: c# unity3d unity5

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

1 个答案:

答案 0 :(得分: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停止触发。