我的While循环一次执行所有内容(C#)

本文关键字:执行 一次 While 我的 循环 | 更新日期: 2023-09-27 18:26:53

所以我把这个脚本附加到了一个游戏中,我添加的While循环应该跟踪弹药,每次我发射火箭时都会下降1,但当我在游戏中左键点击(射击)时,它会同时发射我所有的弹药。我的代码:

public class CreateRocket : MonoBehaviour {
public Rigidbody rocket;
public float speed = 10f;
public int aantalRaketten;
public int Ammo = 10;
// Use this for initialization
void Start () {}
// Update is called once per frame
void Update () {
    if (Input.GetButtonDown("Fire1"))
    {
      FireRocket();
    }
}
void FireRocket()
{      
    while (Ammo >= aantalRaketten) 
    {
      Ammo--;
      Rigidbody rocketClone = (Rigidbody)Instantiate(rocket, transform.position + transform.forward * 2, transform.rotation);
      rocketClone.velocity = transform.forward * speed;         
    } 
  }
}

谢谢!

我的While循环一次执行所有内容(C#)

好吧:但当我在游戏中左键点击(射击)时,它会同时发射我所有的弹药

是的,这正是你在while循环中所做的,运行直到你的条件为false(aantalRaketten=0?):

while (Ammo >= aantalRaketten) 
{
  Ammo--;
  Rigidbody rocketClone = (Rigidbody)Instantiate(rocket, transform.position + transform.forward * 2, transform.rotation);
  rocketClone.velocity = transform.forward * speed;
} 

我认为你需要把时间改为如果,以检查是否有火箭可以发射:

if (Ammo > 0) 
{
  Ammo--;
  Rigidbody rocketClone = (Rigidbody)Instantiate(rocket, transform.position + transform.forward * 2, transform.rotation);
  rocketClone.velocity = transform.forward * speed;
} 

您误解了什么是while循环。关键是单词循环。循环的主体可以执行多次:

while (Ammo >= aantalRaketten) 
{
    Ammo--;
    ....
} 

循环的条件决定主体是否被执行。当循环主体完成时,将再次测试条件。如果条件计算结果为true,则主体将再次执行。此循环将继续,直到条件计算结果为false。

我想你是想用if声明来写这篇文章的。

if (Ammo >= aantalRaketten) 
{
    Ammo--;
    ....
} 

在这里,身体最多执行一次。如果条件计算结果为true,则执行if语句的If主体。没有循环,没有迭代。

删除循环!毕竟,每次发射火箭时,你只想发射一个单位的弹药。

当您调用void FireRocket()一次时,它会进入并完全运行while()循环,并发射所有火箭。。

你想要的是在void FireRocket()中只有if,以检查Ammo是否可以拍摄。。像这个

if(Ammo >= aantalRaketten)
{
    Ammo--;
    Rigidbody rocketClone = (Rigidbody)Instantiate(rocket, transform.position +  transform.forward * 2, transform.rotation);
    rocketClone.velocity = transform.forward * speed;
}

void FireRocket() 内部

Ammo结束后,else将显示您想要向玩家显示的内容。。