c# - 我在 C# 中有一个 for 循环我只想运行一次
问题描述
我有一个 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;
}
}
}
我有一个单独的函数将 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++;
}
}
}
另外,为什么它现在不起作用。您提到您changeClassBool
在一定时间后设置为 false 。但是这个循环是立即运行的,这意味着它会在一帧内完成,不管循环有多大。如果您想在循环中等待,可以将其设为协程并添加 ayield return null
以使其等待一帧。
但是,如果您唯一想做的就是每次单击按钮时都经过此操作,那么仅使用计数器而不是循环就不会那么复杂且更稳定。
推荐阅读
- git - 单个设备中的多个 git 用户
- python - 如何使 Python 中的字符串解析变得不那么笨拙?
- c# - WIX 图标无法正常工作
- sql - 需要查询以选择带有作者姓名的特定评论
- url-parameters - 如何在 opencart 3.x 中向 url 添加优惠券代码和产品 ID?
- xcode - 找不到具有以下名称的广告网络适配器:com.google.DummyAdapter
- c# - 将指数形式的数字转换为十进制
- android - FirebaseRecyclerAdapter 触发两次
- c++ - char *a[] ={"yes","no"} 是否需要 malloc?
- javascript - 当我们单击动态创建的编辑图标时,如何更改输入字段中的值?