【问题标题】:IndexOutOfRange on a loop in UnityUnity 循环中的 IndexOutOfRange
【发布时间】:2023-01-26 03:45:12
【问题描述】:

我想弄清楚如何摆脱 Unity 中的 IndexOutOfRange 错误。我尝试了几种不同的方法,但我不知所措。

只是当我按下 Tab 键时,我按计划循环遍历我的游戏对象数组,但是当你到达最后一个时,它会抛出它。如果可能的话,我想让它循环回到开头。我已经为此忙了大概 2 天了。

这是我到目前为止所拥有的(我只包含了重要的变量,因为这个脚本很大)

    int currentWindow = 0;

    public GameObject theUI;
    public GameObject[] windows;

 void Update()
    {
        //Toggle Menu
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            
            if (theUI.activeInHierarchy)
            {
                theUI.SetActive(false);
            }
            else
            {
                
                theUI.SetActive(true);
                windows[0].SetActive(true);
                Refresh();
            }
        }

        //Toggle Between Windows
        if (theUI.activeInHierarchy)
        {
            if (Input.GetKeyDown(KeyCode.Tab))
            {
                ToggleWindow(currentWindow);
            }
        }
    }


    public void ToggleWindow(int windowNumber)
    {
        
        if (windowNumber == currentWindow)
        {

            windows[windowNumber].SetActive(!windows[windowNumber].activeInHierarchy);
            Refresh();
            currentWindow++;


            windows[currentWindow].SetActive(!windows[currentWindow].activeInHierarchy);
            
        }
    }

如果有人知道该怎么做,请帮忙!我遵循了一些不同的东西,但是因为我的 windows[] 数组是一个游戏对象而不是一个 int 或其他任何东西,所以很难弄清楚如何使用其他来源修复它。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:
    currentWindow++;
    
    windows[currentWindow]....
    

    如果该索引超过数组大小,则不会进行任何检查。

    对于简单的环绕,您可以使用

    currentWindow = (currentWindow + 1) % windows.Length;
    

    因此,如果currentWindow到达windkws.Length,它会再次从0开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-31
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多