123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- using UnityEngine;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine.UI;
- /// <summary>
- /// 图片管理器
- /// </summary>
- public class IconManager : MonoSingleton<IconManager> //MonoBehaviour
- {
- /// <summary>
- /// 资源
- /// </summary>
- public Dictionary<string, Sprite> mIconRes = new Dictionary<string, Sprite>();
- /// <summary>
- /// 资源源
- /// </summary>
- public Dictionary<string, AssetBundle> mIconContainer = new Dictionary<string, AssetBundle>();
- /// <summary>
- /// 初始化
- /// </summary>
- private void Start()
- {
- mIconRes.Clear();
- mIconContainer.Clear();
- }
- /// <summary>
- /// 加载资源
- /// </summary>
- /// <param name="bundleName"> 资源包的名称 </param>
- /// <param name="ac"> 加载完后执行的回调 </param>
- public void LoadRes(string bundleName, Action ac)
- {
- ResourceHelper.Instance.LoadAssetBundle(bundleName, (AssetBundle bundle) =>
- {
- if (null != bundle)
- {
- GameObject go = (GameObject)bundle.LoadAsset(bundleName);
- List<Sprite> tempList = go.GetComponent<IconContainer>().mSpriteList;
- foreach (Sprite spr in tempList)
- {
- if (spr != null)
- {
- mIconRes[spr.name] = spr;
- }
- }
- }
- ac();
- });
- }
- /// <summary>
- /// 获取图标
- /// </summary>
- /// <param name="iconContainer">容器bundle名称</param>
- /// <param name="resName"> 图标的名称 </param>
- /// <param name="callBack">赋值成功后回调</param>
- public void GetSprite(string iconContainer, string resName, Action<Sprite> 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);
- }
- });
- }
- }
- /// <summary>
- /// 为图标赋值
- /// </summary>
- /// <param name="mImage">图片</param>
- /// <param name="iconContainer">容器名称</param>
- /// <param name="icon">资源名称</param>
- /// <param name="isNativeSize">是否图片原始大小</param>
- /// <param name="succeedCallBack">回调</param>
- 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();
- }
- }
- });
- }
- /// <summary>
- /// 设置精灵
- /// </summary>
- /// <param name="mSprite"></param>
- /// <param name="iconContainer"></param>
- /// <param name="icon"></param>
- /// <param name="isNativeSize"></param>
- /// <param name="succeedCallBack"></param>
- /// <param name="failCallBack"></param>
- /// <param name="scale"></param>
- 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<Texture, Vector2[]> 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);
- }
- }
- });
- }
- }
|