using UnityEngine; using System; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; /// /// 图片管理器 /// public class IconManager : MonoSingleton //MonoBehaviour { /// /// 资源 /// public Dictionary mIconRes = new Dictionary(); /// /// 资源源 /// public Dictionary mIconContainer = new Dictionary(); /// /// 初始化 /// private void Start() { mIconRes.Clear(); mIconContainer.Clear(); } /// /// 加载资源 /// /// 资源包的名称 /// 加载完后执行的回调 public void LoadRes(string bundleName, Action ac) { ResourceHelper.Instance.LoadAssetBundle(bundleName, (AssetBundle bundle) => { if (null != bundle) { GameObject go = (GameObject)bundle.LoadAsset(bundleName); List tempList = go.GetComponent().mSpriteList; foreach (Sprite spr in tempList) { if (spr != null) { mIconRes[spr.name] = spr; } } } ac(); }); } /// /// 获取图标 /// /// 容器bundle名称 /// 图标的名称 /// 赋值成功后回调 public void GetSprite(string iconContainer, string resName, Action callBack) { string bundleName = resName; if (mIconRes.ContainsKey(bundleName) && mIconRes[bundleName] != null) { if (callBack != null) { callBack(mIconRes[bundleName]); } } else { LoadRes(IconPrefixConst.getIconContainerName(iconContainer), () => { if (mIconRes.ContainsKey(bundleName)) { if (callBack != null) { callBack(mIconRes[bundleName]); } } else { callBack(null); } }); } } /// /// 为图标赋值 /// /// 图片 /// 容器名称 /// 资源名称 /// 是否图片原始大小 /// 回调 public void SetIcon(Image mImage, string iconContainer, string icon, bool isNativeSize = false, Action succeedCallBack = null, Action failCallBack = null, float scale = 1.0f) { if (string.IsNullOrEmpty(icon)) { return; } IconManager.Instance.GetSprite(iconContainer, icon, texture => { if (texture != null) { mImage.sprite = texture; if (Mathf.Abs(scale - 1.0f) > 0.005f) { mImage.transform.localScale = new Vector3(scale, scale, scale); } if (isNativeSize) { mImage.SetNativeSize(); } if (succeedCallBack != null) { succeedCallBack(); } } else { mImage.sprite = null; if (failCallBack != null) { failCallBack(); } } }); } /// /// 设置精灵 /// /// /// /// /// /// /// /// public void SetIcon(Sprite mSprite, string iconContainer, string icon, bool isNativeSize = false, Action succeedCallBack = null, Action failCallBack = null, float scale = 1.0f) { IconManager.Instance.GetSprite(iconContainer, icon, texture => { if (texture != null) { mSprite = texture; if (succeedCallBack != null) { succeedCallBack(); } } else { mSprite = null; if (failCallBack != null) { failCallBack(); } } }); } public void GetIconTexture(string iconContainer, string icon, bool isNativeSize = false, Action succeedCallBack = null) { IconManager.Instance.GetSprite(iconContainer, icon, sprite => { if (sprite != null) { if (succeedCallBack != null) { //Texture2D tex = new Texture2D((int)sprite.rect.width, (int)sprite.rect.height, sprite.texture.format, false); //tex.SetPixels(sprite.texture.GetPixels((int)sprite.rect.xMin, (int)sprite.rect.yMin, // (int)sprite.rect.width, (int)sprite.rect.height)); //tex.Apply(); Texture tex = sprite.texture; succeedCallBack(tex, sprite.uv); } } }); } }