// 当资源文件加载完毕 private void OnAssetFileLoad(AssetFileLoader loader) { // 注意 : 如果在加载过程中调用UnLoad,等资源文件加载完毕时不再执行后续准备工作。 if (Result != EAssetResult.Loading) { return; } // Check error if (loader.LoadState != EAssetFileLoadState.LoadAssetFileOK) { Result = EAssetResult.Failed; _userCallback?.Invoke(this); return; } if (this is AssetScene || this is AssetPackage) { bool result = OnPrepare(null); Result = result ? EAssetResult.OK : EAssetResult.Failed; _userCallback?.Invoke(this); } else if (this is AssetObject) { loader.LoadMainAsset(null, OnMainAssetLoad); } else { throw new System.NotImplementedException($"Not support invalid asset class."); } }
public AssetProvider(AssetFileLoader owner, string assetName, System.Type assetType) { _owner = owner; AssetName = assetName; AssetType = assetType; States = EAssetProviderStates.None; Handle = new AssetOperationHandle(this); }
/// <summary> /// 卸载 /// </summary> public void UnLoad() { Result = EAssetResult.None; _userCallback = null; if (_cacheLoader != null) { _cacheLoader.Release(); _cacheLoader = null; } }
/// <summary> /// 卸载 /// </summary> public virtual void UnLoad() { Result = EAssetResult.None; if (_cacheLoader != null) { _cacheLoader.Release(); _cacheLoader = null; } }
/// <summary> /// 异步加载 /// </summary> public void Load(string resName, System.Action <Asset, EAssetResult> prepareCallbcak) { // 防止重复加载 if (Result != EAssetResult.None) { LogSystem.Log(ELogType.Warning, $"Asset {ResName} is already load."); return; } if (_cacheLoader != null) { LogSystem.Log(ELogType.Warning, $"Asset {ResName} loader must null."); return; } ResName = resName; Result = EAssetResult.Loading; _prepareCallback = prepareCallbcak; _cacheLoader = AssetSystem.LoadAssetFile(ResName, AssetType, OnAssetFileLoad); }
/// <summary> /// 异步加载 /// </summary> public void Load(string resName, System.Action <Asset> userCallbcak) { // 防止重复加载 if (Result != EAssetResult.None) { LogSystem.Log(ELogType.Warning, $"Asset {ResName} is already load."); return; } if (_cacheLoader != null) { LogSystem.Log(ELogType.Warning, $"Asset {ResName} loader must null."); return; } ResName = resName; Result = EAssetResult.Loading; _userCallback = userCallbcak; bool isStreamScene = this is AssetScene; _cacheLoader = AssetSystem.LoadAssetFile(ResName, isStreamScene, OnAssetFileLoad); }
private void OnAssetFileLoad(AssetFileLoader loader) { // 注意 : 如果在加载过程中调用UnLoad,等资源文件加载完毕时不再执行后续准备工作。 if (Result != EAssetResult.Loading) { return; } if (loader.LoadState == EAssetFileLoadState.LoadAssetFileOK) { loader.LoadMainAsset(AssetType, OnAssetObjectLoad); } else { Result = EAssetResult.Failed; // 回调接口 if (_prepareCallback != null) { _prepareCallback.Invoke(this, Result); } } }
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 = HotBytesLoader.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 = AssetFileLoader.Load(depPath); if (request.Loaders == null) { request.Loaders = new List <AbstractResourceLoader>(); } 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 = AssetBundleLoader.Load(path); if (request.Loaders == null) { request.Loaders = new List <AbstractResourceLoader>(); } request.Loaders.Add(sceneLoader); while (!sceneLoader.IsCompleted) { yield return(null); } } else { var assetLoader = AssetFileLoader.Load(path); while (!assetLoader.IsCompleted) { yield return(null); } request.Asset = assetLoader.Asset; } request.IsDone = true; }
/// <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 = HotBytesLoader.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 = AssetFileLoader.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 = AssetBundleLoader.Load(path); //while (!sceneLoader.IsCompleted) // yield return null; return(null); } else { var assetLoader = AssetFileLoader.Load(path); //while (!assetLoader.IsCompleted) // yield return null; return(assetLoader.Asset); } }