/// <summary> /// 异步加载资源 /// </summary> /// <param name="assetName">需要加载的资源路径</param> /// <param name="onLoadAsset">加载成功之后的回调</param> /// <returns>请求Id</returns> public static int LoadAssetAsync(string assetName, OnLoadAsset onLoadAsset) { // 回调不存在不允加载 if (onLoadAsset == null) { GameLogger.LogError("[资源加载错误] 加载函数回调不能为空,加载后也没有引用"); return(0); } // 资源对应bundle名 string abName = BundleAsset.GetBundleName(assetName); if (abName == null) { GameLogger.LogError("[资源加载错误] 找不到资源 ", assetName); return(0); } // 获取请求ID int requestId = ResourceManager.GetRequestId(); LoadAssetInfo loadAssetInfo = GetTempLoadAssetInfo(); loadAssetInfo.requestId = requestId; loadAssetInfo.assetName = assetName; loadAssetInfo.onLoadAsset = onLoadAsset; loadAssetInfo.bundleName = abName; EnterLoadWait(loadAssetInfo); // 1 asset是否已加载 if (ReferenceObject.IsObjectCreate(loadAssetInfo.assetName)) { EnterWaitCall(loadAssetInfo); } // 2 bundle是否已加载 else if (!ReferenceBundle.IsAssetBundleCraete(abName)) { PushPending(loadAssetInfo); } // 3 从bundle加载资源 else { List <LoadAssetInfo> loadingAssetList = GetLoadAssetStateList(LoadAssetStep.Loading); if (loadingAssetList.Count < _frameLoadMaxCount) { LoadAssetAsync(loadAssetInfo); } } _loadAssetInfoList.Add(loadAssetInfo); return(requestId); }
public AssetLoader LoadAssetAsync(string assetName, OnLoadAsset callback) { return(LoadAssetAsync("", assetName, callback)); }
public static AssetResolveLoader Load(string path, string package, Type type, OnLoadAsset onFinish = null, LoaderMode loaderMode = LoaderMode.Async) { LoaderDelgate realcallback = null; if (onFinish != null) { realcallback = (isOk, obj) => onFinish(isOk, obj as Object); } return(AutoNew <AssetResolveLoader>(path, realcallback, false, loaderMode, package, type, false)); }
/// <summary> /// Loads the asset bundle async. /// 'assetBundlePath',只需要填相对路径,不用填后缀,如 UI/Panel/MenuPanel,除非ab不是按AssetConfig里面配置的后缀来设置的. /// 'assetName',只需要填相对路径,需要加后缀,如 UI/Panel/MenuPanel.prefab /// </summary> public AssetLoader LoadAssetAsync(string assetBundleRelativePath, string assetName, OnLoadAsset callback) { // 如果是加载ab中的资源,需要填完成的路径,这跟 BuildAssetBundleOptions 有关,参考BundleBuilder.BuildAssetBundle() if (!string.IsNullOrEmpty(assetBundleRelativePath)) { assetName = AssetConfig.GetAssetFullPathInAB(assetName); } string fullRelativePath = AssetConfig.GetAssetBundleFullRelativePath(assetBundleRelativePath); string assetBundleFullPath = AssetConfig.GetGameAssetFullPath(fullRelativePath); LoaderCallback internelHandler = (bool isOk, object resultObject) => { if (isOk) { callback.Invoke(resultObject as Object); } else { callback.Invoke(null); } }; return(BaseLoader.Load <AssetLoader>(assetBundleFullPath, assetName, callback: internelHandler)); }