コード例 #1
0
        /// <summary>
        /// 根据名字 加载单个AssetBundle
        /// </summary>
        /// <param UIName="name"></param>
        /// <returns></returns>
        private AssetBundle LoadAssetBundle(string name)
        {
            AssetBundleItem item = null;
            uint            crc  = Crc32.GetCrc32(name);

            if (!_AssetBundleCacheDic.TryGetValue(crc, out item))
            {
                AssetBundle assetBundle = null;
                string      fullPath    = AssetBundlePath + "/" + name;
                if (File.Exists(fullPath))
                {
                    assetBundle = AssetBundle.LoadFromFile(fullPath);
                }

                if (assetBundle == null)
                {
                    Debug.LogError("Load AsetBundle Error: " + fullPath);
                }

                item             = _AssetBundleItemPool.Spawn(true);
                item.assetBundle = assetBundle;
                item.RefCount++;
                _AssetBundleCacheDic.Add(crc, item);
            }
            else
            {
                item.RefCount++;
            }

            return(item.assetBundle);
        }
コード例 #2
0
        private void UnLoadAssetBundle(string name)
        {
            AssetBundleItem item = null;
            uint            crc  = Crc32.GetCrc32(name);

            if (_AssetBundleCacheDic.TryGetValue(crc, out item) && item != null)
            {
                item.RefCount--;
                if (item.RefCount <= 0 && item.assetBundle != null)
                {
                    item.assetBundle.Unload(true);
                    item.Rest();
                    _AssetBundleItemPool.Recycle(item);
                    _AssetBundleCacheDic.Remove(crc);
                }
            }
        }