And*_*200 1 c# for-loop boolean unity-game-engine
我有一个for循环,在遍历数组时只需要调用一次。
public void ChangeClassButton()
{
Debug.Log("Changed Class");
for (int i = 0; i < activeDrum.Length && !changeClassBool; i++)
{
Debug.Log(activeDrum[i]);
changeClassText.text = activeDrum[i];
OscMessage oscM = Osc.StringToOscMessage("/changeClass" + i);
Debug.Log(Osc.OscMessageToString(oscM));
oscHandler.Send(oscM);
changeClassBool = true;
if (i >= activeDrum.Length)
{
i = 0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个单独的函数,在设定的时间后将changeClassBool设置为false。
我试图在按下按钮时得到一个迭代,但是当我在游戏中按下按钮时,它只会遍历整个数组。对我做错了什么建议吗?
for循环可能不是解决此问题的最佳方法。调用方法时,仅增加值怎么样?
private int count = 0;
public void ChangeClassButton()
{
Debug.Log("Skiftede klasse");
if(!changeClassBool){
{
Debug.Log(activeDrum[count]);
changeClassText.text = activeDrum[count];
OscMessage oscM = Osc.StringToOscMessage("/changeClass" + count);
Debug.Log(Osc.OscMessageToString(oscM));
oscHandler.Send(oscM);
changeClassBool = true;
if (count >= activeDrum.Length)
{
count = 0;
} else{
count++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
另外,关于为什么它现在不起作用。您提到changeClassBool
在一定时间后设置为false。但是此循环是立即运行的,这意味着无论循环有多大,它都将在一帧内完成。如果要在循环中等待,可以使其成为协程并添加一个yield return null
使其等待一帧。
但是,如果您唯一想做的就是每次单击按钮时都要进行此操作,那么使用计数器而不是循环就不会那么复杂和稳定。