using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ImgPackage
{
/// <summary>
/// 下载地址
/// </summary>
public string url;
/// <summary>
/// 下载完成
/// </summary>
public Action<Texture> Downloaded;
public int loadError = 0;
}
public class HttpAsynImg : MonoBehaviour {
private int limitLoadCount = 2;
private static HttpAsynImg _instance;
public static HttpAsynImg Instance
{
get
{
if (_instance == null)
{
_instance = new GameObject("HttpAsynImg").AddComponent<HttpAsynImg>();
}
return _instance;
}
}
private Queue<ImgPackage> threadEvents = new Queue<ImgPackage>();
private int limitCoroutineCount = 5;
private int currentCoroutineCount = 0;
/// <summary>
/// 添加事件
/// </summary>
public void AddEvent(string url,Action<Texture> callback=null)
{
ImgPackage package = new ImgPackage();
package.url = url;
package.Downloaded = callback;
threadEvents.Enqueue(package);
}
public void OnUpdate()
{
if (threadEvents.Count > 0 && currentCoroutineCount <= limitCoroutineCount)
{
ImgPackage threadEvent = threadEvents.Dequeue();
try
{
currentCoroutineCount += 1;
StartCoroutine(OnDownLoad(threadEvent));
}
catch (System.Exception ex)
{
}
}
}
IEnumerator OnDownLoad(ImgPackage imageEvent)
{
using (WWW www = new WWW(imageEvent.url))
{
yield return www;
if (www.error != null)
{
Debug.LogError( "图片地址:" + imageEvent.url + "下载错误信息:" + www.error);
//如果下载失败,再放回队列里重新下载
if (imageEvent.loadError< limitLoadCount)
{
imageEvent.loadError += 1;
threadEvents.Enqueue(imageEvent);
}
}
else
{
currentCoroutineCount -= 1;
if (imageEvent.Downloaded!=null)
{
imageEvent.Downloaded(www.texture);
}
}
}
}
private void Update()
{
OnUpdate();
}
}
unity 异步加载图片2
最新推荐文章于 2024-06-28 11:39:27 发布