使用 WWW class 加载多个外部纹理

Load multiple external textures with WWW class

我想使用 Unity 在运行时加载多个 png 文件。我正在使用 www class 加载给定目录的纹理。这是我的代码:

    public IEnumerator LoadPNG(string _path)
    {
        string[] filePaths = Directory.GetFiles(_path);
        foreach (string fileDir in filePaths)
        {
            using (WWW www = new WWW("file://" + Path.GetFullPath(fileDir )))
            {
                yield return www;
                Texture2D texture = Texture2D.whiteTexture;
                www.LoadImageIntoTexture(texture);
                this.textureList.Add(texture);
            }
        }
    }

这个函数被称为协程。当程序完成加载所有纹理时,textureList 数组具有正确数量的纹理。但它们都是最后加载的纹理。感谢任何帮助。

这里的简单错误:using (WWW www = new WWW("file://" + Path.GetFullPath(_path))).

您应该使用 foreach 循环中的 url,即 fileDir

编辑:

也将 textureList = new List<Texture2D>(); 移到函数外。把它放在 Start() 函数之类的里面。

    public IEnumerator LoadPNG(string _path)
    {
        string[] filePaths = Directory.GetFiles(_path);
        foreach (string fileDir in filePaths)
        {
            using (WWW www = new WWW("file://" + Path.GetFullPath(fileDir)))
            {
                yield return www;
                Texture2D texture = Texture2D.whiteTexture;
                www.LoadImageIntoTexture(texture);
                textureList.Add(texture);
            }
        }
    }

注意:建议在Unity中使用for循环而不是foreach循环来循环List。在 Unity 5.5 中你不必担心这个问题。

你犯了一个小错误,只使用了一个对象:

            using (WWW www = new WWW("file://" + Path.GetFullPath(fileDir )))
            {
                yield return www;
                // Change this...
                //Texture2D texture = Texture2D.whiteTexture;
                // to this:
                Texture2D texture = new Texture2D(0, 0);
                //or us this:
                //Texture2D texture = www.texture;
                www.LoadImageIntoTexture(texture);
                textureList.Add(texture);
            }

正如 Fre 博士在评论中所说的那样。