从服务器下载的纹理在iOS上显示为黑色

时间:2014-01-18 22:39:00

标签: c# unity3d textures ienumerator

我正在Unity3d中构建一个应用程序,我需要从我的服务器下载纹理并将它们应用到预制件。 我有两种类型的预制件; 第一个是用于显示2d图像的简单平面,第二个是用于播放视频的预制件,并且具有在全屏播放视频之前显示的缩略图纹理。

我遇到视频预制件的问题。如果我在我的脚本中创建一个公共纹理并将其应用到预制件,一切正常。但是,如果我从服务器下载纹理并将其应用到预制件,它将显示为黑色。这只发生在iOS中,在Unity Player中一切正常。

这是我的代码:

实例化预制件:

newVideo = (GameObject)Instantiate(arvideo, new Vector3(15*i, 0, 0), Quaternion.identity);
newVideo.GetComponent<VideoPlaybackBehaviour>().m_path = ((Assets)Data.Assets[i]).AssetContent; // SET THE URL FOR THE VIDEO

string url = ((Assets)Data.Assets[i]).AssetThumbnail;
StartCoroutine(DownloadImage(url, newVideo, ((Assets)Data.Assets[i]).AssetFilename, "VIDEO"));

newVideo.transform.rotation = Quaternion.Euler(0, -180, 0);

下载IEnumerator:

public IEnumerator DownloadImage(string url, GameObject tex, string filename, string type) 
{

    WWW www = new WWW(url);
    yield return www;

    /* EDIT: */
    if (!string.IsNullOrEmpty(www.error)){
    Debug.LogWarning("LOCAL FILE ERROR: "+www.error);
    } else if(www.texture == null) {
    Debug.LogWarning("LOCAL FILE ERROR: TEXTURE NULL");
    } else {
    /* EOF EDIT */
        tex.GetComponent<VideoPlaybackBehaviour>().KeyframeTexture = www.texture;
        Color color = tex.renderer.material.color;
        color.a = 1f;
        tex.renderer.material.color = color;
    }

}

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。经过几个小时的搜索,就我而言,我通过在 iOS 播放器设置中禁用“Metal write-only BackBuffer”解决了这个问题。我使用的是 unity 2020.1.8f1,实际上我不知道为什么后台缓冲区设置会导致 iOS 设备中出现黑色纹理问题。