/// <summary> /// 同步加载AssetBundle /// </summary> /// <param name="relativePath"></param> /// <returns></returns> public static Object LoadAssetBundleSync(string relativePath) { //CheckLoadShadersPrefab(); // manifest string manifestPath = ResourceDepUtils.GetBuildPath(String.Format("{0}.manifest{1}", relativePath, AppEngine.GetConfig(KEngineDefaultConfigs.AssetBundleExt))); var manifestLoader = KBytesLoader.Load(manifestPath, LoaderMode.Sync); //while (!manifestLoader.IsCompleted) // yield return null; var manifestBytes = manifestLoader.Bytes; manifestLoader.Release(); // 释放掉文本字节 if (manifestBytes != null) { var manifestList = GetManifestList(manifestBytes); for (var i = 0; i < manifestList.Length; i++) { var depPath = manifestList[i] + AppEngine.GetConfig(KEngineDefaultConfigs.AssetBundleExt); //var depLoader = KAssetFileLoader.Load(depPath); //while (!depLoader.IsCompleted) //{ // yield return null; //} /*if (Application.isEditor) * { * Log.Info("Load dep sync:{0}, from: {1}", depPath, relativePath); * }*/ } } else { Log.Warning("Cannot find Manifest: {0}", relativePath); } string path = GetBuildPath(String.Format("{0}{1}", relativePath, AppEngine.GetConfig(KEngineDefaultConfigs.AssetBundleExt))); //while (!assetLoader.IsCompleted) // yield return null; // 获取后缀名 var ext = Path.GetExtension(relativePath); if (ext == ".unity" || ext == ".shader") { // Scene //var sceneLoader = KAssetBundleLoader.Load(path); //while (!sceneLoader.IsCompleted) // yield return null; return(null); } else { var assetLoader = KAssetFileLoader.Load(path); //while (!assetLoader.IsCompleted) // yield return null; return(assetLoader.Asset); } }
private static IEnumerator CoLoadAssetBundleAsync(string relativePath, ResourceDepRequest request) { // manifest string manifestPath = ResourceDepUtils.GetBuildPath(String.Format("{0}.manifest{1}", relativePath, AppEngine.GetConfig(KEngineDefaultConfigs.AssetBundleExt))); var manifestLoader = KBytesLoader.Load(manifestPath, LoaderMode.Sync); while (!manifestLoader.IsCompleted) { yield return(null); } // manifest读取失败,可能根本没有manifest,是允许的 if (manifestLoader.IsSuccess) { var manifestBytes = manifestLoader.Bytes; manifestLoader.Release(); // 释放掉文本字节 string[] manifestList = GetManifestList(manifestBytes); for (var i = 0; i < manifestList.Length; i++) { var depPath = manifestList[i] + AppEngine.GetConfig(KEngineDefaultConfigs.AssetBundleExt); var depLoader = KAssetFileLoader.Load(depPath); if (request.Loaders == null) { request.Loaders = new List <KAbstractResourceLoader>(); } request.Loaders.Add(depLoader); while (!depLoader.IsCompleted) { yield return(null); } } } string path = GetBuildPath(String.Format("{0}{1}", relativePath, AppEngine.GetConfig(KEngineDefaultConfigs.AssetBundleExt))); // 获取后缀名 var ext = Path.GetExtension(relativePath); if (ext == ".unity" || ext == ".shader") { // Scene var sceneLoader = KAssetBundleLoader.Load(path); if (request.Loaders == null) { request.Loaders = new List <KAbstractResourceLoader>(); } request.Loaders.Add(sceneLoader); while (!sceneLoader.IsCompleted) { yield return(null); } } else { var assetLoader = KAssetFileLoader.Load(path); while (!assetLoader.IsCompleted) { yield return(null); } request.Asset = assetLoader.Asset; } request.IsDone = true; }
private IEnumerator _Init(string path, string assetName, KAssetBundleLoaderMode loaderMode) { IsLoadAssetBundle = KEngine.AppEngine.GetConfig("IsLoadAssetBundle").ToInt32() != 0; AssetInBundleName = assetName; UnityEngine.Object getAsset = null; if (!IsLoadAssetBundle) { string extension = System.IO.Path.GetExtension(path); path = path.Substring(0, path.Length - extension.Length); // remove extensions getAsset = Resources.Load <UnityEngine.Object>(path); if (getAsset == null) { Logger.LogError("Asset is NULL(from Resources Folder): {0}", path); } OnFinish(getAsset); } else { _bundleLoader = KAssetBundleLoader.Load(path, null, loaderMode); while (!_bundleLoader.IsCompleted) { if (IsReadyDisposed) // 中途释放 { _bundleLoader.Release(); OnFinish(null); yield break; } yield return(null); } if (!_bundleLoader.IsSuccess) { Logger.LogError("[KAssetFileLoader]Load BundleLoader Failed(Error) when Finished: {0}", path); _bundleLoader.Release(); OnFinish(null); yield break; } var assetBundle = _bundleLoader.Bundle; System.DateTime beginTime = System.DateTime.Now; if (AssetInBundleName == null) { // 经过AddWatch调试,.mainAsset这个getter第一次执行时特别久,要做序列化 //AssetBundleRequest request = assetBundle.LoadAsync("", typeof(Object));// mainAsset //while (!request.isDone) //{ // yield return null; //} try { Logger.Assert(getAsset = assetBundle.mainAsset); } catch { Logger.LogError("[OnAssetBundleLoaded:mainAsset]{0}", path); } } else { // TODO: 未测试过这几行!~~ AssetBundleRequest request = assetBundle.LoadAsync(AssetInBundleName, typeof(Object)); while (!request.isDone) { yield return(null); } getAsset = request.asset; } KResourceModule.LogLoadTime("AssetFileBridge", path, beginTime); if (getAsset == null) { Logger.LogError("Asset is NULL: {0}", path); } _bundleLoader.Release(); // 释放Bundle(WebStream) } if (Application.isEditor) { if (getAsset != null) { KResoourceLoadedAssetDebugger.Create(getAsset.GetType().Name, Url, getAsset as UnityEngine.Object); } } if (getAsset != null) { // 更名~ 注明来源asset bundle 带有类型 getAsset.name = string.Format("{0}~{1}", getAsset, Url); } OnFinish(getAsset); }