基于Unity UGUI RawImage的网络头像功能实现方案

实现类似排行版、社交模块的头像下载与管理的封装,使用者只需要对控件进行图片网络地址的设置就能完成图片刷新。为了方便,代码全写在一个脚本,需要的自己整合一下。

使用方法:将脚本挂载到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<string,Texture2D> mImageCacheDict = new Dictionary<string, Texture2D>();
    private RawImage mImage;

    void Awake()
    {
        mImage = GetComponent<RawImage>();

        //Test
        //SetOnlineTexture("http://thirdwx.qlogo.cn/mmopen/vi_32/ceXE8MaLuaThTbb3hibXvcoq6q3tt7APnP5GicHY6caYkYa86sVBMhH7JKQJICfWlsD4PTWlM3iaKXjdoM5gp1Ddg/96");
    }


    public void SetOnlineTexture(string mUrl)
    {
        Action<bool,Texture2D> 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<bool, Texture2D> 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);
        }
    }
}

 

 

 


 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值