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