【问题标题】:How to fix IndexOutOfRangeException in Unity如何在 Unity 中修复 IndexOutOfRangeException
【发布时间】:2021-12-22 02:32:43
【问题描述】:

我在文件夹截图中有很多图像。所以这个脚本将在不应用的情况下从文件夹中调用图像。但问题是,图像只显示一个图像。我的意思是他们没有像幻灯片放映或淡入淡出那样转到下一张图片。

然后我不断收到此错误消息:

IndexOutOfRangeException: Index was outside the bounds of the array.

它指向这个代码:

ImageHolder[i].GetComponent<RawImage>().texture = thisTexture;

完整代码:

Texture2D thisTexture;
byte[] bytes;
string fileName;

public GameObject[] ImageHolder = new GameObject[1];
    
void Start()
    {
        var imagesToLoad = Directory.GetFiles(Application.dataPath + "/screenshots", "*.png");
        for (int i = 0; i < imagesToLoad.Length; i++)
    
        {
            thisTexture = new Texture2D(100, 100); //NOW INSIDE THE FOR LOOP
            fileName = imagesToLoad[i];
            bytes = File.ReadAllBytes(fileName);
    
            thisTexture.LoadImage(bytes);
            thisTexture.name = fileName;
    
    
            // This line
            ImageHolder[i].GetComponent<RawImage>().texture = thisTexture;
        }
    }
}

我在这里附加了输出。我有 4 个RawImage。图像只是显示并卡住。

【问题讨论】:

  • 能否请您为您的问题提供更多详细信息(基本代码)。
  • 另请注意:代码片段并非用于格式化代码!代码片段是可运行的代码块,用于创建最小、完整且可验证的示例!
  • 你初始化一个大小为 1 的数组。您的游戏对象未初始化,如果您的路径包含多个图像,这也会失败,即使游戏对象已初始化。
  • ImageHolder 包含 1 个元素,并且您很可能在 for 循环中循环了超过 1 个项目。所以很明显,imagesToLoad.Length > 1,所以当 for 循环到达第二个元素 i = 1 时,代码会失败。
  • Noe UnityScript(js) 已经死了,你应该考虑迁移到 C#

标签: c# unity3d indexoutofrangeexception


【解决方案1】:

更新!!错误已解决!

我把变量放在图像持有者上

从这里

*ImageHolder[i].GetComponent<RawImage>().texture = thisTexture;

*ImageHolder[9].GetComponent<RawImage>().texture = thisTexture;

但只显示在 RawImage(9) 并且仍然卡在一张图像上。

【讨论】:

    【解决方案2】:

    据我了解,您在编辑器中使用 GameObjects 填充数组 ImageHolder。因此,当您初始化该字段时,您可以删除新 GameObject[1] 的不相关且令人困惑的分配。

    但是如果你的 ImageHolder 数组比 imagesToLoad 数组短,你应该跳出 for 循环。

    或者通过扩展数组并创建新的 ImageHolders GameObject 以不同的方式解释它,在这种情况下您可能想要使用列表。您可以直接引用 RawImage 并创建一个 Prefab,这样您就可以更轻松地创建和填充您的列表。

    您可以只调整 imagesToLoad 数组的大小,或者如果您想使用第一个使用 .First() 或选择特定范围,而不是打破 for 循环。

    【讨论】:

      猜你喜欢
      • 2021-06-23
      • 2022-11-20
      • 2021-12-14
      • 2020-04-28
      相关资源
      最近更新 更多