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

时间:2016-09-21 14:56:13

标签: c# unity3d textures ienumerator

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

    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数组具有正确的纹理量。但所有这些都是最后加载的纹理。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:3)

只使用一个物体,你犯了一个小错误:

            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博士在评论中所述。

答案 1 :(得分:1)

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

您应该使用url循环foreach中的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中使用List循环而不是for循环遍历foreach。您不必在Unity 5.5中担心这一点。