我想使用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数组具有正确的纹理量。但所有这些都是最后加载的纹理。任何帮助表示赞赏。
答案 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中担心这一点。