0

我对 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;
        }
    }

}

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

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

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

4

1 回答 1

2

您无需等待下载完成。

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

请参阅WWW 的 Unity 文档

但是请注意,该页面示例代码是错误的,并且 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)
}
于 2013-07-14T11:42:42.213 回答