Ejemplo n.º 1
0
        /// <summary>
        /// 同步资源加载,外部直接调用,仅加载不需要实例化的资源,例如Texture,音频等等
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="path"></param>
        /// <returns></returns>
        public T LoadResource <T>(string path) where T : UnityEngine.Object
        {
            if (string.IsNullOrEmpty(path))
            {
                return(null);
            }
            uint        crc  = CRC32.GetCrc32(path);
            ResouceItem item = GetCacheResouceItem(crc);

            if (item != null)
            {
                return(item.m_Obj as T);
            }

            T obj = null;

#if UNITY_EDITOR
            if (!m_LoadFormAssetBundle)
            {
                item = AssetBundleManager.Instance.FindResourceItme(crc);
                if (item != null && item.m_AssetBundle != null)
                {
                    if (item.m_Obj != null)
                    {
                        obj = (T)item.m_Obj;
                    }
                    else
                    {
                        obj = item.m_AssetBundle.LoadAsset <T>(item.m_AssetName);
                    }
                }
                else
                {
                    if (item == null)
                    {
                        item       = new ResouceItem();
                        item.m_Crc = crc;
                    }
                    obj = LoadAssetByEditor <T>(path);
                }
            }
#endif

            if (obj == null)
            {
                item = AssetBundleManager.Instance.LoadResouceAssetBundle(crc);
                if (item != null && item.m_AssetBundle != null)
                {
                    if (item.m_Obj != null)
                    {
                        obj = item.m_Obj as T;
                    }
                    else
                    {
                        obj = item.m_AssetBundle.LoadAsset <T>(item.m_AssetName);
                    }
                }
            }

            CacheResource(path, ref item, crc, obj);
            return(obj);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 同步加载资源,针对给ObjectManager的接口
        /// </summary>
        /// <param name="path"></param>
        /// <param name="resObj"></param>
        /// <returns></returns>
        public ResouceObj LoadResource(string path, ResouceObj resObj)
        {
            if (resObj == null)
            {
                return(null);
            }

            uint crc = resObj.m_Crc == 0 ? CRC32.GetCrc32(path) : resObj.m_Crc;

            ResouceItem item = GetCacheResouceItem(crc);

            if (item != null)
            {
                resObj.m_ResItem = item;
                return(resObj);
            }

            Object obj = null;

#if UNITY_EDITOR
            if (!m_LoadFormAssetBundle)
            {
                item = AssetBundleManager.Instance.FindResourceItme(crc);
                if (item != null && item.m_Obj != null)
                {
                    obj = item.m_Obj as Object;
                }
                else
                {
                    if (item == null)
                    {
                        item       = new ResouceItem();
                        item.m_Crc = crc;
                    }
                    obj = LoadAssetByEditor <Object>(path);
                }
            }
#endif

            if (obj == null)
            {
                item = AssetBundleManager.Instance.LoadResouceAssetBundle(crc);
                if (item != null && item.m_AssetBundle != null)
                {
                    if (item.m_Obj != null)
                    {
                        obj = item.m_Obj as Object;
                    }
                    else
                    {
                        obj = item.m_AssetBundle.LoadAsset <Object>(item.m_AssetName);
                    }
                }
            }

            CacheResource(path, ref item, crc, obj);
            resObj.m_ResItem = item;
            item.m_Clear     = resObj.m_bClear;

            return(resObj);
        }