C# 陷入无限循环和don';我不知道如何逃避(团结)

C# 陷入无限循环和don';我不知道如何逃避(团结),c#,C#,我目前正在研究Unity,代码似乎被困在一个无限循环中 void Start() { button = false; x = 50; y = 50; } void Update() { transform.RotateAround(Vector3.zero, Vector3.back, x * Time.deltaTime); if (Input.GetButtonUp("Jump")) { if (b

我目前正在研究Unity,代码似乎被困在一个无限循环中

void Start()
{
    button = false;

    x = 50;

    y = 50;
}
void Update()
{
    transform.RotateAround(Vector3.zero, Vector3.back, x * Time.deltaTime);


    if (Input.GetButtonUp("Jump")) 
    {
        if (button == false)
        {
            button = true;
           
        }
        else
        {
            button = false;
                            
        }
        
    }
    while (button == true)
    {
        Vector3 pivotPosition = GameObject.Find("fire").transform.position;
        transform.RotateAround(pivotPosition, Vector3.back, y * Time.deltaTime);
        x = 0;
        y = 50;
    }

    while (button == false)
    {
        Vector3 pivotPosition = GameObject.Find("ice").transform.position;
        transform.RotateAround(pivotPosition, Vector3.back, x * Time.deltaTime);
        x = 50;
        y = 0;
    }
}
}


这段代码是关于改变一个物体的轴心,使它有点像游戏中的火与冰之舞。问题似乎是while循环,它创建了一个无限循环,阻止我启动代码。如果您知道如何解决此问题,请帮助我…

我认为问题在于您希望
按钮的值在
中更新,而
会阻塞,鉴于您提供的代码没有任何外部上下文,我不能说这是否是
Input.GetButtonUp(“Jump”)
控件(?)的有效预期。我猜不是基于你有问题这一事实

我希望您需要一个用于
Input.GetButtonUp(“Jump”)
的事件处理程序,其中设置了
button
的值,之后循环将继续


另一方面,您可能希望更多地了解异步代码流。

您的代码将Y设置为50,并不断重复(数千次)将Y设置为50,直到代码的某些部分更新“按钮”,在这种情况下,它会将Y设置为0,X设置为50000次,直到再次更改按钮,之后它将最终退出该方法。关于如何/何时更改按钮,您需要在问题中更加明确,但您需要为while循环创建更好的退出条件。如果您想在没有无限循环的情况下进行测试,可以执行以下操作

if (Input.GetButtonUp("Jump")) 
    button = !button
if (button)
{
    Vector3 pivotPosition = GameObject.Find("fire").transform.position;
    transform.RotateAround(pivotPosition, Vector3.back, y * Time.deltaTime);
    x = 0;
    y = 50;
}
else
{
    Vector3 pivotPosition = GameObject.Find("ice").transform.position;
    transform.RotateAround(pivotPosition, Vector3.back, x * Time.deltaTime);
    x = 50;
    y = 0;
}
public async Task StartSpinVector(){
     if (button)
        while(button)
     {
          Vector3 pivotPosition = GameObject.Find("fire").transform.position;
          transform.RotateAround(pivotPosition, Vector3.back, y * Time.deltaTime);
          x = 0;
          y = 50;
          await Task.Delay(50);//so we don't go nuts, wait 50 ms before repeating
      }
      else 
         while(!button)
       {
           Vector3 pivotPosition = GameObject.Find("ice").transform.position;
             transform.RotateAround(pivotPosition, Vector3.back, x * Time.deltaTime);
             x = 50;
             y = 0;
             await Task.Delay(50);//so we don't go nuts, wait 50 ms before repeating
        }
       }
如果您确实希望代码继续运行,直到按钮再次受到影响,您可以执行以下操作

if (Input.GetButtonUp("Jump")) 
    button = !button
if (button)
{
    Vector3 pivotPosition = GameObject.Find("fire").transform.position;
    transform.RotateAround(pivotPosition, Vector3.back, y * Time.deltaTime);
    x = 0;
    y = 50;
}
else
{
    Vector3 pivotPosition = GameObject.Find("ice").transform.position;
    transform.RotateAround(pivotPosition, Vector3.back, x * Time.deltaTime);
    x = 50;
    y = 0;
}
public async Task StartSpinVector(){
     if (button)
        while(button)
     {
          Vector3 pivotPosition = GameObject.Find("fire").transform.position;
          transform.RotateAround(pivotPosition, Vector3.back, y * Time.deltaTime);
          x = 0;
          y = 50;
          await Task.Delay(50);//so we don't go nuts, wait 50 ms before repeating
      }
      else 
         while(!button)
       {
           Vector3 pivotPosition = GameObject.Find("ice").transform.position;
             transform.RotateAround(pivotPosition, Vector3.back, x * Time.deltaTime);
             x = 50;
             y = 0;
             await Task.Delay(50);//so we don't go nuts, wait 50 ms before repeating
        }
       }
然后在主更新代码中,调用(但不要等待)此方法,这样更新就不会完全失控

   private Task updateLoopTask;
   void Update(){
        ...
        updateLoopTask = StartSpinVector();//save the task in case we want to await it later or something
   }

或者你可能想做些别的事情,如果你详细说明你的问题,我们可以做出更具体的回答

我是unity的新手。。。你能再给我解释一下吗?