首页 > 解决方案 > 我在 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 。

我试图在按下按钮时进行迭代,但是当我在游戏中按下按钮时,它只会迭代整个数组。关于我做错了什么的任何建议?

标签: c#for-loopunity3dboolean

解决方案


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以使其等待一帧。

但是,如果您唯一想做的就是每次单击按钮时都经过此操作,那么仅使用计数器而不是循环就不会那么复杂且更稳定。


推荐阅读