public AssetHandle(AssetBundleHandle abHandle, string assetName) { _abHandle = abHandle; _obj = abHandle.assetBundle.LoadAsset(assetName); _type = ParseStringToAssetType(assetName, out _tail); _avaliable = _obj != null; }
public AssetHandle(AssetBundleHandle abHandle, string name, string dictionaryKey) { this.abHandle = abHandle; this.abHandle.IncrementReference(); this.name = name; this.dictionaryKey = dictionaryKey; }
private void OnCompleted(AsyncOperation ao) { AssetBundleCreateRequest request = ao as AssetBundleCreateRequest; if (request.assetBundle == null) { return; } _selectedHandle = AddToAbDict(abPath, request.assetBundle); RecalculateScrollViewAreaSize(); }
/// <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); }
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()); }
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(); }
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); }
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(); } } }
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); }