在循环期间将远程图像添加为纹理

时间:2013-07-13 19:04:54

标签: unity3d

我是Unity3d的新手。 我有一个JSON数组,其中包含我想在运行时创建的预制件的参数。

我想在场景中显示存储在我服务器上的图像。 我有一个预制“iAsset”有一个平面(网格过滤器),我想加载图像文件作为平面的纹理。

我能够预制预制件,但预制件显示为白色方块。这是我的代码:

    for(var i = 0; i < bookData.Assets.Count; i++){
    GameObject newAsset = null;

    newAsset = (GameObject)Instantiate(iasset, new Vector3(2*i, 0, 0), Quaternion.identity);

    if(!imageAssetRequested )            
    {
        remoteImageAsset = new WWW(((BookAssets)bookData.Assets[i]).AssetContent);

        imageAssetRequested = true;
    }

    if(remoteImageAsset.progress >=1)
    {
        if(remoteImageAsset.error == null)
        {
            loadingRemoteAsset = false;
            newAsset.renderer.material.mainTexture = remoteImageAsset.texture;
        }
    }

}

我的服务器上的图像的URL是从JSON数组中检索的:

((BookAssets)bookData.Assets[i]).AssetContent);

代码构建没有任何错误,我非常感谢显示远程图像的任何帮助。

1 个答案:

答案 0 :(得分:2)

您不是在等待下载完成。

WWW类是异步的,将开始下载。但是,您需要稍后轮询它(使用上面的代码),或者在CoRoutine中使用yield WWW来阻止您的执行(在该CoRoutine中),直到下载完成(成功或由于失败)。

请参阅Unity Documentation for WWW

但请注意,该页面示例代码错误,Start不是CoRoutine / IEnumarator。您的代码看起来像:

void Start()
{
  ... your code above ...
  StartCoroutine(DownloadImage(bookData.Assets[i]).AssetContent, newAsset.renderer.material.mainTexture));
}


IEnumerator DownloadImage(string url, Texture tex) 
{
  WWW www = new WWW(url);
  yield return www;
  tex.LoadImage(www.bytes)
}