如何在Unity中修复IndexOutOfRangeException问题。

3

我有很多图片存储在screenshots文件夹中。因此,这个脚本将从文件夹中调用图像而不应用。但问题是,图像只显示一张。我的意思是它们没有像幻灯片或淡入淡出那样进入下一张图像。

然后我不停地收到这个错误消息:

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。该图片只是显示并卡住了。

enter image description here


1
请问您能否提供更多细节,例如必要的代码,以便回答您的问题。 - Vickel
1
请注意:代码片段不是用来格式化代码的!代码片段是可运行的代码块,用于创建最小、完整和可验证的示例! - Vickel
2
你使用大小为1来初始化一个数组。 如果你的 GameObjects 没有被初始化,或者你的路径包含多个图像,则这也会失败,即使 GameObject 已经被初始化。 - S. Stumm
1
ImageHolder 包含 1 个元素,你很可能正在 for 循环中遍历多于 1 个的项目。所以很明显 imagesToLoad.Length > 1,因此当 for 循环到达第二个元素即 i=1 时,代码会失败。 - Desolator
你好。谢谢您的回复!我有一个任务,需要实时显示许多图像(1000++)。然后我需要在不应用元素、不使用按钮、不触发器的情况下显示图像。就像幻灯片一样自动播放。假设我在Unity中有6个RawImage,那么这个脚本将显示Rawimage中的图像。我已经成功地显示了它,但我无法使其转到下一张图片。比如第一组6张图片将会显示并消失,然后出现新的6张图片。@Vickel - chimmy12
显示剩余2条评论
2个回答

0

更新!!错误已经解决!

我将变量放在图像容器中了

从这里开始

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

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

但是仅在RawImage(9)上显示,并且仍然卡在一个图像上。


0

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

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

或者通过扩展数组并创建新的 ImageHolders GameObject 来以不同的方式进行计算,在这种情况下,您可能希望使用列表。您可以直接引用 RawImage 并创建一个 Prefab,以便更轻松地创建和填充列表。

您可以调整 imagesToLoad 数组的大小,或者如果要使用第一个,请使用 .First() 或选择特定范围。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接