public AssetHandle(AssetBundleHandle abHandle, string assetName)
 {
     _abHandle  = abHandle;
     _obj       = abHandle.assetBundle.LoadAsset(assetName);
     _type      = ParseStringToAssetType(assetName, out _tail);
     _avaliable = _obj != null;
 }
Esempio n. 2
0
 public AssetHandle(AssetBundleHandle abHandle, string name, string dictionaryKey)
 {
     this.abHandle = abHandle;
     this.abHandle.IncrementReference();
     this.name          = name;
     this.dictionaryKey = dictionaryKey;
 }
Esempio n. 3
0
    private void OnCompleted(AsyncOperation ao)
    {
        AssetBundleCreateRequest request = ao as AssetBundleCreateRequest;

        if (request.assetBundle == null)
        {
            return;
        }
        _selectedHandle = AddToAbDict(abPath, request.assetBundle);
        RecalculateScrollViewAreaSize();
    }
Esempio n. 4
0
    /// <summary>
    /// 添加到ab包字典里
    /// </summary>
    /// <param name="abPath">ab包加载路径</param>
    /// <param name="ab">加载后的ab包</param>
    private AssetBundleHandle AddToAbDict(string abPath, AssetBundle ab)
    {
        if (_loadedAbDict.ContainsKey(abPath))
        {
            ShowNotification(new GUIContent("{0} 包已经在字典里了"));
            return(_loadedAbDict[abPath]);
        }
        AssetBundleHandle handle = new AssetBundleHandle(ab, abPath);

        _loadedAbDict.Add(abPath, handle);
        Debug.LogFormat("{0}添加进AB字典", ab.name);
        return(handle);
    }
Esempio n. 5
0
    private void UnloadSelectedAb(bool unload)
    {
        if (_selectedHandle == null || !_selectedHandle.Avaliable)
        {
            return;
        }

        _loadedAbDict.Remove(_selectedHandle.AbPath);

        _selectedHandle.Unload(unload);

        _selectedHandle = null;

        RecalculateScrollViewAreaSize();
    }
    /// <summary>
    /// 为一个AB包里的所有资源生成资源操作句柄
    /// </summary>
    /// <param name="abHandle">AB包的操作句柄</param>
    /// <returns></returns>
    public static AssetHandle[] GetAssetHandles(AssetBundleHandle abHandle)
    {
        if (abHandle == null)
        {
            Debug.LogError("ab包不能为空");
            return(null);
        }
        string[]           names   = abHandle.assetBundle.GetAllAssetNames();
        List <AssetHandle> handles = new List <AssetHandle>();

        foreach (string name in names)
        {
            handles.Add(new AssetHandle(abHandle, name));
        }
        return(handles.ToArray());
    }
Esempio n. 7
0
    private void UnLoadAllAB()
    {
        foreach (AssetBundleHandle handle in _loadedAbDict.Values)
        {
            if (handle.Avaliable)
            {
                handle.Unload(true);
            }
        }
        _loadedAbDict.Clear();

        foreach (AssetBundle ab in AssetBundle.GetAllLoadedAssetBundles())
        {
            ab.Unload(true);
        }
        _selectedHandle = null;

        RecalculateScrollViewAreaSize();
    }
Esempio n. 8
0
    private void LoadAbAtPath(string path)
    {
        if (path == null || path == string.Empty)
        {
            return;
        }
        if (_loadedAbDict.ContainsKey(path))
        {
            this.ShowNotification(new GUIContent("ab包已在列表里"));
            _selectedHandle = _loadedAbDict[path];
            return;
        }
        AssetBundle ab = AssetBundle.LoadFromFile(path);

        if (ab == null)
        {
            return;
        }
        _selectedHandle = AddToAbDict(path, ab);
    }
Esempio n. 9
0
    private void DrawLeftBarContent()
    {
        if (_loadedAbDict.Count <= 0)
        {
            return;
        }

        foreach (AssetBundleHandle abHandle in _loadedAbDict.Values)
        {
            if (!abHandle.Avaliable)
            {
                continue;
            }
            bool selected = _selectedHandle == abHandle;

            if (GUILayout.Toggle(selected, new GUIContent(abHandle.AbName), EditorStyles.toolbarButton, GUILayout.Width(200f)))
            {
                _selectedHandle = abHandle;
                RecalculateScrollViewAreaSize();
            }
        }
    }
Esempio n. 10
0
        public LoadHandle Load(
            string identifier,
            OnComplete onComplete       = null,
            GameObject holderGameObject = null)
        {
            string assetBundleName, assetName;

            _database.ParseIdentifier(out assetBundleName, out assetName, identifier);

            var abHandleDictionaryKey    = assetBundleName;
            var assetHandleDictionaryKey = identifier;

            AssetHandle assetHandle = null;

            lock (_lock)
            {
                // まず完了済みから探す
                if (!_completeHandles.TryGetValue(assetHandleDictionaryKey, out assetHandle))
                {
                    // ロード中から探す
                    _loadingHandles.TryGetValue(assetHandleDictionaryKey, out assetHandle);
                }
            }

            // みつからなかったので生成
            if (assetHandle == null)
            {
                // ないのでハンドル生成が確定
                AssetBundleHandle abHandle = null;
                if (!_abHandles.TryGetValue(abHandleDictionaryKey, out abHandle))
                {
                    Hash128 hash;
                    uint    crc;
                    _database.GetAssetBundleMetaData(out hash, out crc, assetBundleName);

                    var cachedAssetBundle = new CachedAssetBundle();
                    cachedAssetBundle.hash = hash;
                    cachedAssetBundle.name = assetBundleName;
                    var path = _downloadRoot + assetBundleName;
                    abHandle = new AssetBundleHandle(
                        assetBundleName,
                        ref cachedAssetBundle,
                        path);
                    _abHandles.Add(abHandleDictionaryKey, abHandle);
                }
                assetHandle = new AssetHandle(abHandle, assetName, assetHandleDictionaryKey);
                _loadingHandles.Add(assetHandleDictionaryKey, assetHandle);
            }

            if (onComplete != null)
            {
                if (assetHandle.isDone)
                {
                    onComplete(assetHandle.asset);
                }
                else
                {
                    assetHandle.AddCallback(onComplete);
                }
            }
            assetHandle.IncrementReferenceThreadSafe();

            var handle = new LoadHandle(assetHandleDictionaryKey, this);

            if (holderGameObject != null)
            {
                var holder = holderGameObject.GetComponent <LoadHandleHolder>();
                if (holder == null)
                {
                    holder = holderGameObject.AddComponent <LoadHandleHolder>();
                }
                holder.Add(handle);
            }
            return(handle);
        }