我是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);
代码构建没有任何错误,我非常感谢显示远程图像的任何帮助。
答案 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)
}