using System; using System.Collections; using UnityEngine; namespace OCES { public class AssetBundleAssetProvider : IAssetProvider { readonly AssetBundle m_assetBundle; public AssetBundleAssetProvider(string bundleFilePath) { this.m_assetBundle = AssetBundle.LoadFromFile(bundleFilePath); if (this.m_assetBundle is null) { Debug.LogError($"[OCES] 无法加载: {bundleFilePath}"); } } public T Load(string path) where T : UnityEngine.Object { return this.m_assetBundle.LoadAsset(path); } public void LoadAsync(string path, MonoBehaviour coroutineHost, Action onComplete) where T : UnityEngine.Object { coroutineHost.StartCoroutine(LoadAsyncCoroutine(path, onComplete)); } IEnumerator LoadAsyncCoroutine(string path, Action onComplete) where T : UnityEngine.Object { AssetBundleRequest request = this.m_assetBundle.LoadAssetAsync(path); yield return request; onComplete?.Invoke(request.asset as T); } } }