使用 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 博士在评论中所说的那样。
我想使用 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 博士在评论中所说的那样。