using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace AssetBundleHub { /// /// AssetBundleをキャッシュするための入れ物 /// 多重ロードを避けるためにキャッシュは必須 /// CountはLoadで+1 Unloadで-1 Getでは不変 /// public class AssetBundleRef { public AssetBundle AssetBundle { get; private set; } public int Count { get; private set; } List disposables; // Streamの解放タイミングを制御するために保持 public AssetBundleRef(AssetBundle assetBundle, List disposables = null) { if (assetBundle == null) { throw new ArgumentNullException("assetBundle is null"); } AssetBundle = assetBundle; Count = 1; this.disposables = disposables; } internal void IncrementRefCount() { Count++; } internal void DecrementRefCount() { Count--; } public void Unload(bool unloadAllLoadedObjects) { AssetBundle.Unload(unloadAllLoadedObjects); if (disposables != null) { foreach (var disposable in disposables) { disposable.Dispose(); } } } } }