/// <summary> /// 根据ab包和资源名获取一个资源 /// </summary> /// <param name="bundleName"></param> /// <param name="assetName"></param> /// <returns></returns> internal IEnumerator GetAssetAsync(string bundleName, string assetName, AsyncOperationHandle handle) { if (string.IsNullOrWhiteSpace(bundleName)) { var assetInfoDto = AssetInfoDtoList.FirstOrDefault(a => a.AssetName == assetName); if (assetInfoDto != null) { bundleName = assetInfoDto.AssetBundleName; } else { Debug.LogError($"没有找到资源:{assetName}对应的包名"); yield break; } } AssetBundleInfoDto bundleInfoDto = GetBundleInfoDto(bundleName); if (!_alreadyLoadDic.ContainsKey(bundleName)) { if (bundleInfoDto != null) { yield return(GameApp.Instance.StartCoroutine(LoadAssetBundleAsync(bundleInfoDto))); } else { Debug.LogError($"没有找到资源:{bundleName}包"); yield break; } } AssetBundle assetBundle = _alreadyLoadDic[bundleName]; handle.Result = assetBundle.LoadAsset(assetName); }
internal Object GetAsset(string bundleName, string assetName) { if (string.IsNullOrWhiteSpace(bundleName)) { var assetInfoDto = AssetInfoDtoList.FirstOrDefault(a => a.AssetName == assetName); if (assetInfoDto != null) { bundleName = assetInfoDto.AssetBundleName; } else { Debug.LogError($"没有找到资源:{assetName}对应的包名"); return(null); } } AssetBundleInfoDto bundleInfoDto = GetBundleInfoDto(bundleName); if (!_alreadyLoadDic.ContainsKey(bundleName)) { if (bundleInfoDto != null) { LoadAssetBundle(bundleInfoDto); } else { Debug.LogError($"没有找到资源:{bundleName}包"); return(null); } } AssetBundle assetBundle = _alreadyLoadDic[bundleName]; return(assetBundle.LoadAsset(assetName)); }
private void LoadAssetBundle(AssetBundleInfoDto bundleInfoDto) { AssetBundle assetBundle = AssetBundle.LoadFromFile(AssetBundlePath + "/" + bundleInfoDto.AssetBundleName); bundleInfoDto.LastUseTime = DateTime.Now; _alreadyLoadDic.Add(bundleInfoDto.AssetBundleName, assetBundle); foreach (var item in bundleInfoDto.Dependencies) { if (!_alreadyLoadDic.ContainsKey(item)) { AssetBundleInfoDto temp = GetBundleInfoDto(item); if (temp != null) { LoadAssetBundle(temp); } } } }
private IEnumerator LoadAssetBundleAsync(AssetBundleInfoDto bundleInfoDto) { AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(AssetBundlePath + "/" + bundleInfoDto.AssetBundleName); yield return(request); bundleInfoDto.LastUseTime = DateTime.Now; _alreadyLoadDic.Add(bundleInfoDto.AssetBundleName, request.assetBundle); foreach (var item in bundleInfoDto.Dependencies) { if (!_alreadyLoadDic.ContainsKey(item)) { AssetBundleInfoDto temp = GetBundleInfoDto(item); if (temp != null) { yield return(GameApp.Instance.StartCoroutine(LoadAssetBundleAsync(temp))); } } } }