1、思路:加载图片的请求都加到队列中,然后一个加载完一个再去加载下一个,直到加载完。
List<Action> _loadAction = new List<Action>();
public void LoadRaw(string url, Image image)
{
if(string.IsNullOrEmpty(url)) return;
_loadAction.Add(()=>{ StartCoroutine(StartLoadImage(url,image))});
}
IEnumerator StartLoadImage(string url,Image image)
{
using(UnityWebRequest uwr = UnityWebRequestTexture.GetTexture(url))
{
yield return uwr.SendWebRequest();
if(uwr.isHttpError || uwr.isNetworkError) Debug.Log(uwr.error);
else
{
try
{
Texture2D texture2d = new Texture2D(1,1);
texture2d = DownloadHandlerTexture.GetContent(uwr);
image.sprite = Sprite.Create(texture2d,new Rect(0,0,texture2d.width,texture2d.height),Vector2.zero);
Resources.UnloadUnusedAssets();
_loadAction.RemoveAt(0);
isLoad = false;
}
catch(Exception ex)
{
}
}
}
}
bool isLoad = false;
Void Update()
{
if(!isLoad && _loadAction.Count != 0)
{
isLoad = true;
Action action = _loadAction[0];
action.Invoke();
}
}
2、问题:
问题是相对也存在的。当加载的数据还在队列中,但是已经跳转到其它的场景,则会出现报错的问题。
每次跳转场景的时候,需要把队列中的数据清空,然后isLoad=false;