基于Unity UGUI RawImage的网络头像功能实现方案
程序员文章站
2022-04-03 12:28:57
...
实现类似排行版、社交模块的头像下载与管理的封装,使用者只需要对控件进行图片网络地址的设置就能完成图片刷新。为了方便,代码全写在一个脚本,需要的自己整合一下。
使用方法:将脚本挂载到RawImage控件,调用SetOnlineTexture方法,传入图片网路地址即可。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System;
using System.Collections.Generic;
[RequireComponent(typeof(RawImage))]
public class ImageDownloader : MonoBehaviour {
private static Dictionary mImageCacheDict = new Dictionary();
private RawImage mImage;
void Awake()
{
mImage = GetComponent();
//Test
//SetOnlineTexture("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1506247880185&di=df9429c3802ea6cb5fae77643d926047&imgtype=0&src=http%3A%2F%2F58pic.ooopic.com%2F58pic%2F22%2F90%2F18%2F18r58PICEP7.png");
}
public void SetOnlineTexture(string mUrl)
{
Action handle = (bool mIsSuccess,Texture2D mSetupTexture) =>
{
if (mIsSuccess)
{
mImage.texture = mSetupTexture;
}
else
{
//TODO 加载失败处理
}
};
Texture2D mTexture;
if (TryGetImageInCache(mUrl, out mTexture))
{
handle(true,mTexture);
}
else
{
StartCoroutine(DownLoadImages(mUrl,handle));
}
}
IEnumerator DownLoadImages(string mUrl, Action mCallBack)
{
WWW www = new WWW(mUrl);
while (!www.isDone)
{
yield return null;
}
if (string.IsNullOrEmpty(www.error))
{
UpdateImageInCache(mUrl, www.texture);
mCallBack(true,www.texture);
}
else
{
mCallBack(false,null);
}
www.Dispose();
yield return null;
}
public static bool TryGetImageInCache(string mPath, out Texture2D mTexture)
{
return mImageCacheDict.TryGetValue(mPath, out mTexture);
}
public static void UpdateImageInCache(string mPath, Texture2D mTexture)
{
if (mImageCacheDict.ContainsKey(mPath))
{
mImageCacheDict[mPath] = mTexture;
}
else
{
mImageCacheDict.Add(mPath, mTexture);
}
}
}
上一篇: 【Unity】Unity 获取边位置
下一篇: Unity 异步加载场景