不能发射两次火球

Can't shoot fire ball twice

所以我正在制作一款类似于 Space Invaders 的游戏,只包含 Poke'mon。在游戏中,玩家(Charmeleon)应在按下 Space 键时发射火球(每次按下一个火球)。问题是当我按下 Space 键时,玩家只需按下一次即可同时发射所有火球。我该如何解决?在我完成后,我会将游戏免费提供给能解决我问题的人。这是我的代码:

if (ableToFire == true)
    {
        GameObject Flame = GameObject.Find("Fire");

        if (usedFire == 0)
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                Debug.Log("Fire");

                Flame.GetComponent<SpriteRenderer>().enabled = true;
                Flame.GetComponent<Rigidbody>().AddForce(Vector3.up * 175);

                usedFire++;

                Debug.Log("You used fire " + usedFire + " times");
            }
        }


        GameObject Flame2 = GameObject.Find("Fire 2");

        if (usedFire == 1)
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                Debug.Log("Fire");

                Flame2.GetComponent<SpriteRenderer>().enabled = true;
                Flame2.GetComponent<Rigidbody>().AddForce(Vector3.up * 175);

                usedFire++;

                Debug.Log("You used fire " + usedFire + " times");
            }
        }
    }

The player shoots all of the fire balls at the same time after only one press.

如果我们检查您的代码流,我们可以更清楚地了解为什么会发生这种情况。首先我们检查玩家是否能够开火,如果他是,我们然后额外检查 usedFire 整数是 0 还是 1。

现在的问题是,在进入代码的 usedFire == 0 部分后,我们增加了 usedFire 变量,然后我们离开函数,然后检查 usedFire 变量是 1。它是,因为我们刚刚增加了它。

现在再次调用代码的第二部分,将 usedFire 变量增加到 3。重新调用代码的另一部分,因此不再产生火球。

if (ableToFire != true || !Input.GetKeyDown(KeyCode.Space)) {
    // If the player can't fire or hasn't pressed space, skip the rest of the code.
    return;
}

if (usedFire == 0) {   
    Flame.GetComponent<SpriteRenderer>().enabled = true;
    Flame.GetComponent<Rigidbody>().AddForce(Vector3.up * 175);

    usedFire++;
    Debug.Log("You used fire " + usedFire + " times");
}
else if(usedFire == 1) {
    Flame2.GetComponent<SpriteRenderer>().enabled = true;
    Flame2.GetComponent<Rigidbody>().AddForce(Vector3.up * 175);

    usedFire++;
    Debug.Log("You used fire " + usedFire + " times");

    // Reset usedFire so we can use it again.
    usedFire = 0;
}

我还建议您将两个 GameObject.Find() 调用都移动到 Start() 方法中,因为每帧搜索 2 个 GameObject 确实会对游戏性能造成负担。

GameObject Flame;
GameObject Flame2;

private void Start() {
    Flame = GameObject.Find("Fire");
    Flame2 = GameObject.Find("Fire 2");
}