C# 陷入无限循环和don';我不知道如何逃避(团结)
我目前正在研究Unity,代码似乎被困在一个无限循环中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
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的新手。。。你能再给我解释一下吗?