你好,我加载纹理这段代码: settingSplit,这是字符串数组。
IEnumerator DownloadLogos()
{
WWW www = new WWW(settingsSplit[0]);
while (www.progress < 1)
{
slider.GetComponent<UISlider>().value = www.progress;
if (slider.GetComponent<UISlider>().value > 0.880f)
{
slider.GetComponent<UISlider>().value = 1;
}
yield return new WaitForEndOfFrame();
}
yield return www;
if (www.error == null)
{
fadein = true;
model.GetComponent<Animation>().Play();
texTmp = www.textureNonReadable;
spr = Sprite.Create(texTmp, new Rect(0, 0, texTmp.width, texTmp.height), Vector2.zero, 50);
spr.texture.wrapMode = TextureWrapMode.Clamp;
mat.mainTexture = spr.texture;
decal.sprite = spr;
yield return new WaitForEndOfFrame();
slider.SetActive(false);
float multipier = 1;
if (settingsSplit[2] != null)
{
multipier = float.Parse(settingsSplit[2]);
}
decal.transform.localScale = new Vector3(decal.transform.localScale.x * multipier,
decal.transform.localScale.y * multipier, decal.transform.localScale.z);
BuildDecal(decal);
}工作正常,但当纹理加载MainThread停止一段时间(1-2秒)。我该怎么解决这个问题呢?谢谢!
发布于 2016-12-27 19:12:43
我不知道你是否解决了这个问题,但我也面临着同样的问题。有问题的一行是
spr = Sprite.Create(texTmp, new Rect(0, 0, texTmp.width, texTmp.height), Vector2.zero, 50);因为Sprite的创建需要一段时间并在主线程中运行,这会导致游戏冻结。
我的解决方案是使用RawImage而不是图像来显示加载的纹理,只需删除提到的行并替换
decal.sprite = spr;使用
decal.texture = www.texture;并设置要使用的其余属性/值。
我希望这对有这个问题的人有所帮助。
发布于 2015-02-26 02:02:15
WaitForEndOfFrame在帧的末尾恢复。我相当确定如果你在帧的末尾让步,在帧的末尾,你仍然不会前进到下一帧。只需生成null,您将继续下一帧。
while (www.progress < 1)
{
slider.GetComponent<UISlider>().value = www.progress;
if (slider.GetComponent<UISlider>().value > 0.880f)
{
slider.GetComponent<UISlider>().value = 1;
}
yield return null;
}https://stackoverflow.com/questions/28716318
复制相似问题