做直播游戏的时候,用到的头像都是在远程下载的,为了防止重复下载,可以把这些头像临时缓存下来。
public void SetSprite(string _url, Transform _transform)
{
Debug.Log("url:" + _url);
_transform.GetComponent<Image>().sprite = Resources.Load<Sprite>("UI/Item/acquiesce");
if (!string.IsNullOrEmpty(_url))
{
if (sprDic.ContainsKey(_url))
_transform.GetComponent<Image>().sprite = sprDic[_url];
else
StartCoroutine(DownSprite(_url, _transform));
}
}
IEnumerator DownSprite(string _url, Transform _transform)
{
using (UnityWebRequest _request = new UnityWebRequest(_url))
{
//下载图像作为纹理使用
DownloadHandlerTexture texDl = new DownloadHandlerTexture(true);
_request.downloadHandler = texDl;
yield return _request.SendWebRequest();
if (_request.result == UnityWebRequest.Result.ConnectionError)
{
Debug.LogError(_request.error);
}
else if (_transform != null)
{
Texture2D tex = new Texture2D(300, 300);
tex = texDl.texture;
Sprite sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f));
_transform.GetComponent<Image>().sprite = sprite;
if (!sprDic.ContainsKey(_url)) sprDic.Add(_url, sprite);
}
}
}
public Dictionary<string, Sprite> sprDic = new Dictionary<string, Sprite>();
调用方法:
/// <summary>
/// 渲染头像框
/// </summary>
public void CreatSprite(Transform _tran,string _url)
{
Main.MainScript.SetSprite(_url, _tran);
}