private IEnumerator RequestAssetBundlemanifest(string url) { UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url); yield return(request.SendWebRequest()); AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request); AssetBundleManifest abm = ab.LoadAsset <AssetBundleManifest>("AssetBundleManifest"); Debug.Log(abm); if (abm) { DebugLogString(abm.GetAllAssetBundles()); Debug.Log("+________"); DebugLogString(abm.GetAllAssetBundlesWithVariant()); } Object[] objs = ab.LoadAllAssets(); for (int i = 0; i < objs.Count(); i++) { Debug.Log(objs[i].GetType()); } }
/// <summary> /// 获取资源包的最优变体 /// </summary> /// <param name="bundleName"></param> /// <returns></returns> protected string RemapBundleVariant(string bundleName) { string[] bundlesWithVariant = manifest.GetAllAssetBundlesWithVariant(); if (System.Array.IndexOf(bundlesWithVariant, bundleName) < 0) { return(bundleName); } string[] bundleOrigin = bundleName.Split('.'); int bundleIndex = -1; int variantIndex = int.MaxValue; for (int i = 0; i < bundlesWithVariant.Length; i++) { string[] bundleVariant = bundlesWithVariant[i].Split('.'); if (bundleVariant[0] == bundleOrigin[0]) { int found = System.Array.IndexOf(variantExtensions, bundleVariant[1]); if (found != -1 && found < variantIndex) { bundleIndex = i; variantIndex = found; } } } if (bundleIndex != -1) { return(bundlesWithVariant[bundleIndex]); } else { return(bundleName); } }
static string RemapVariantName(string abName) { string[] bundlesWithVariant = manifest.GetAllAssetBundlesWithVariant(); if (Array.IndexOf(bundlesWithVariant, abName) < 0) { return(abName); } string[] split = abName.Split('.'); int bestFit = int.MaxValue; int bestFitIndex = -1; for (int i = 0; i < bundlesWithVariant.Length; i++) { string[] curSplit = bundlesWithVariant[i].Split('.'); if (curSplit[0] != split[0]) { continue; } int found = Array.IndexOf(m_variants, curSplit[1]); if (found != -1 && found < bestFit) { bestFit = found; bestFitIndex = i; } } if (bestFitIndex != -1) { return(bundlesWithVariant[bestFitIndex]); } else { return(abName); } }
/// <summary> /// 重新映射BundleName /// </summary> private static void RemapVariantName(ref string assetBundleName) { if (m_ActiveVariantsQueue.Count == 0) { return; } string[] bundlesWithVariant = m_AssetBundleManifest.GetAllAssetBundlesWithVariant(); string baseName = assetBundleName.Split('.')[0]; for (int i = 0; i < bundlesWithVariant.Length; i++) { string[] curSplit = bundlesWithVariant[i].Split('.'); if (curSplit[0] != baseName) { continue; } if (m_ActiveVariantsQueue.Contains(curSplit[1])) { assetBundleName = bundlesWithVariant[i]; break; } } }
private string RemapVariantn(string assetBundleName) { string[] bundlesWithVariant = manifest.GetAllAssetBundlesWithVariant(); if (System.Array.IndexOf(bundlesWithVariant, assetBundleName) < 0) { return(assetBundleName); } string[] split = assetBundleName.Split('.'); int bestFit = int.MaxValue; int bestFitIndex = -1; int length = bundlesWithVariant.Length; for (int i = 0; i < length; ++i) { string[] curSplit = bundlesWithVariant[i].Split('.'); if (curSplit[0] != split[0]) { continue; } int found = System.Array.IndexOf(variants, curSplit[1]); if (found != -1 && found < bestFit) { bestFit = found; bestFitIndex = i; } } if (bestFitIndex != -1) { return(bundlesWithVariant[bestFitIndex]); } else { return(assetBundleName); } }
// Remaps the asset bundle name to the best fitting asset bundle variant. static protected string RemapVariantName(string assetBundleName) { string[] bundlesWithVariant = m_AssetBundleManifest.GetAllAssetBundlesWithVariant(); // If the asset bundle doesn't have variant, simply return. if (System.Array.IndexOf(bundlesWithVariant, assetBundleName) < 0 ) return assetBundleName; string[] split = assetBundleName.Split('.'); int bestFit = int.MaxValue; int bestFitIndex = -1; // Loop all the assetBundles with variant to find the best fit variant assetBundle. for (int i = 0; i < bundlesWithVariant.Length; i++) { string[] curSplit = bundlesWithVariant[i].Split('.'); if (curSplit[0] != split[0]) continue; int found = System.Array.IndexOf(m_Variants, curSplit[1]); if (found != -1 && found < bestFit) { bestFit = found; bestFitIndex = i; } } if (bestFitIndex != -1) return bundlesWithVariant[bestFitIndex]; else return assetBundleName; }
private void OnGUI() { if (GUILayout.Button("Open Directory")) { OpenDirectory(); } if (GUILayout.Button("Build")) { BuildAssetBundleOptions tOptions; tOptions = BuildAssetBundleOptions.None; BuildTarget tBuildTarget; tBuildTarget = BuildTarget.StandaloneWindows64; AssetBundleManifest manifest = BuildPipeline.BuildAssetBundles(PATH, tOptions, tBuildTarget); foreach (var bundle in manifest.GetAllAssetBundles()) { Debug.Log(bundle); foreach (var dep in manifest.GetAllDependencies(bundle)) { Debug.Log(dep); } Debug.Log("----------------------"); foreach (var variant in manifest.GetAllAssetBundlesWithVariant()) { Debug.Log(variant); } } OpenDirectory(); } }
string RemapVariantName(string assetBundleName) { string[] bundlesWithVariant = manifest.GetAllAssetBundlesWithVariant(); if (System.Array.IndexOf(bundlesWithVariant, assetBundleName) < 0) { return(assetBundleName); } string[] splitBundleName = assetBundleName.Split('.'); string[] candidateBundles = System.Array.FindAll(bundlesWithVariant, element => element.StartsWith(splitBundleName [0])); int index = -1; for (int i = 0; i < bundleVariants.Length; i++) { index = System.Array.IndexOf(candidateBundles, splitBundleName [0] + "." + bundleVariants [i]); if (index != -1) { return(candidateBundles [index]); } } return(assetBundleName); }
/// <summary> /// 获取变体 /// </summary> /// <returns>The variants.</returns> private string GetVariants(string assetBundleName, string variants) { if ((variants == "") || (variants == null)) { return(assetBundleName); } else { if (this.bundlesWithVariant == null) { AssetBundleManifest manifest = this.GetPersistentManifest(); bundlesWithVariant = manifest.GetAllAssetBundlesWithVariant(); } string[] split = assetBundleName.Split('.'); string tmp = split[0] + "." + variants; int index = System.Array.IndexOf(bundlesWithVariant, tmp); if (index == -1) { return(assetBundleName); } else { return(tmp); } } }
// Remaps the asset bundle name to the best fitting asset bundle variant. static protected string RemapVariantName(string assetBundleName) { Debug.Log("RemapVariantName 1"); string[] bundlesWithVariant = m_AssetBundleManifest.GetAllAssetBundlesWithVariant(); Debug.Log("RemapVariantName 2"); // Get base bundle name string baseName = assetBundleName.Split('.')[0]; Debug.Log("RemapVariantName 3"); if (UsesExternalBundleVariantResolutionMechanism(baseName)) { return(baseName); } Debug.Log("RemapVariantName 4"); int bestFit = int.MaxValue; int bestFitIndex = -1; // Loop all the assetBundles with variant to find the best fit variant assetBundle. for (int i = 0; i < bundlesWithVariant.Length; i++) { string[] curSplit = bundlesWithVariant[i].Split('.'); string curBaseName = curSplit[0]; string curVariant = curSplit[1]; if (curBaseName != baseName) { continue; } int found = System.Array.IndexOf(m_ActiveVariants, curVariant); // If there is no active variant found. We still want to use the first if (found == -1) { found = int.MaxValue - 1; } if (found < bestFit) { bestFit = found; bestFitIndex = i; } } Debug.Log("RemapVariantName 5"); if (bestFit == int.MaxValue - 1) { Log(LogType.Warning, "Ambigious asset bundle variant chosen because there was no matching active variant: " + bundlesWithVariant[bestFitIndex]); } Debug.Log("RemapVariantName 6"); if (bestFitIndex != -1) { return(bundlesWithVariant[bestFitIndex]); } else { return(assetBundleName); } }
public static void BuildVariantMapping(BuildTarget target, AssetBundleManifest manifest) { mappingList.Clear(); string rootPath = System.IO.Path.Combine(Application.dataPath, AssetBundleConfig.AssetsFolderName); string outputFilePath = System.IO.Path.Combine(rootPath, AssetBundleConfig.VariantsMapFileName); string[] allVariants = manifest.GetAllAssetBundlesWithVariant(); // 处理带variants的assetbundle foreach (string assetbundle in allVariants) { // 该assetbundle中包含的所有asset的路径(相对于Assets文件夹),如: // Assets/AssetsPackage/UI/Prefabs/Language/[Chinese]/TestVariant.prefab // Assets/AssetsPackage/UI/Prefabs/Language/[English]/TestVariant.prefab // 在代码使用的加载路径中,它们被统一处理为 // Assets/AssetsPackage/UI/Prefabs/Language/[Variant]/TestVariant.prefab // 这里的variant为chinese、english,在AssetBundleManager中设置启用的variant会自动对路径进行正确还原 string[] assetPaths = AssetDatabase.GetAssetPathsFromAssetBundle(assetbundle); if (assetPaths == null || assetPaths.Length == 0) { UnityEngine.Debug.LogError("Empty assetbundle with variant : " + assetbundle); continue; } // 自本节点向上找到Assetbundle所在 AssetBundleImporter assetbundleImporter = AssetBundleImporter.GetAtPath(assetPaths[0]); while (assetbundleImporter != null && string.IsNullOrEmpty(assetbundleImporter.assetBundleVariant)) { assetbundleImporter = assetbundleImporter.GetParent(); } if (assetbundleImporter == null || string.IsNullOrEmpty(assetbundleImporter.assetBundleVariant)) { UnityEngine.Debug.LogError("Can not find assetbundle with variant : " + assetbundle); continue; } string assetbundlePath = assetbundleImporter.assetPath; if (assetbundlePath.EndsWith("/")) { assetbundlePath = assetbundlePath.Substring(0, assetbundlePath.Length - 1); } // 由于各个Variant的内部结构必须完全一致,而Load时也必须完全填写,所以这里不需要关注到assetbundle具体的每个资源 string nowNode = System.IO.Path.GetFileName(assetbundlePath); string mappingItem = string.Format("{0}{1}{2}", assetbundle, PATTREN, nowNode); mappingList.Add(mappingItem); } mappingList.Sort(); if (!GameUtility.SafeWriteAllLines(outputFilePath, mappingList.ToArray())) { Debug.LogError("BuildVariantMapping failed!!! try rebuild it again!"); } else { AssetDatabase.Refresh(); string outputFileAssetPath = GameUtility.FullPathToAssetPath(outputFilePath); AssetBundleEditorHelper.CreateAssetbundleForCurrent(outputFileAssetPath); Debug.Log("BuildVariantMapping success..."); } AssetDatabase.Refresh(); }
// Remaps the asset bundle name to the best fitting asset bundle variant. static protected string RemapVariantName(string assetBundleName) { string[] bundlesWithVariant = assetBundleManifest.GetAllAssetBundlesWithVariant(); // Get base bundle name string baseName = assetBundleName.Split('.')[0]; int bestFit = int.MaxValue; int bestFitIndex = -1; // Loop all the assetBundles with variant to find the best fit variant assetBundle. for (int i = 0; i < bundlesWithVariant.Length; i++) { string[] curSplit = bundlesWithVariant[i].Split('.'); string curBaseName = curSplit[0]; string curVariant = curSplit[1]; if (curBaseName != baseName) { continue; } int found = System.Array.IndexOf(_activeVariants, curVariant); // If there is no active variant found. We still want to use the first if (found == -1) { found = int.MaxValue - 1; } if (found < bestFit) { bestFit = found; bestFitIndex = i; } } if (bestFit == int.MaxValue - 1) { #if UNITY_EDITOR Debug.LogWarning("Ambigious asset bundle variant chosen because there was no matching active variant: " + bundlesWithVariant[bestFitIndex]); #endif } if (bestFitIndex != -1) { return(bundlesWithVariant[bestFitIndex]); } else { return(assetBundleName); } }
// Remaps the asset bundle name to the best fitting asset bundle variant. static protected string RemapVariantName(string assetBundleName) { if (m_AssetBundleManifest == null) { Debug.LogError("RemapVariantName() Please initialize AssetBundleManifest by calling AssetBundleManager.Initialize()"); return(string.Empty); } string[] bundlesWithVariant = m_AssetBundleManifest.GetAllAssetBundlesWithVariant(); string[] split = assetBundleName.Split('.'); int bestFit = int.MaxValue; int bestFitIndex = -1; // Loop all the assetBundles with variant to find the best fit variant assetBundle. for (int i = 0; i < bundlesWithVariant.Length; i++) { string[] curSplit = bundlesWithVariant[i].Split('.'); if (curSplit[0] != split[0]) { continue; } int found = System.Array.IndexOf(m_ActiveVariants, curSplit[1]); // If there is no active variant found. We still want to use the first if (found == -1) { found = int.MaxValue - 1; } if (found < bestFit) { bestFit = found; bestFitIndex = i; } } if (bestFit == int.MaxValue - 1) { Debug.LogWarning("Ambigious asset bundle variant chosen because there was no matching active variant: " + bundlesWithVariant[bestFitIndex]); } if (bestFitIndex != -1) { return(bundlesWithVariant[bestFitIndex]); } else { return(assetBundleName); } }
private void OnMasterManifestLoaded(string bundleName) { Debug.Log("[ABM] OnMasterManifestLoaded"); loadHandlers.Remove(bundleName); AssetBundle bundle; cache.TryGetBundle(bundleName, out bundle); manifest = bundle.LoadAsset <AssetBundleManifest>("AssetBundleManifest"); // Debug.Log("Manifest: "+manifest); onManifestLoaded(manifest.GetAllAssetBundlesWithVariant()); }
//根据当前的变体决定正确的AssetBundle protected static string RemapVariantName(string assetBundleName) { if (string.IsNullOrEmpty(assetBundleName)) { return(null); } if (m_AssetBundleManifest == null) { return(assetBundleName); } string[] bundlesWithVariant = m_AssetBundleManifest.GetAllAssetBundlesWithVariant(); if (bundlesWithVariant == null) { return(assetBundleName); } string[] split = assetBundleName.Split('.'); int bestFit = int.MaxValue; int bestFitIndex = -1; for (int i = 0; i < bundlesWithVariant.Length; i++) { string[] curSplit = bundlesWithVariant[i].Split('.'); if (curSplit[0] != split[0]) { continue; } int found = System.Array.IndexOf(m_ActiveVariants, curSplit[1]); if (found == -1) { found = int.MaxValue - 1; } if (found < bestFit) { bestFit = found; bestFitIndex = i; } } if (bestFit == int.MaxValue - 1) { Debug.LogWarning("Ambigious asset bundle variant chosen because there was no matching active variant: " + bundlesWithVariant[bestFitIndex]); } if (bestFitIndex != -1) { return(bundlesWithVariant[bestFitIndex]); } else { return(assetBundleName); } }
// Remaps the asset bundle name to the best fitting asset bundle variant. /// <summary> /// 切换Variant,如切换某个资源的分辨率 /// </summary> /// <param name="assetBundleName"></param> /// <returns></returns> static protected string RemapVariantName(string assetBundleName) { // 获取所有变体资源包,从manifest获取所有带有variant的资源包 // 每个AssetBundle都可以设置一个variant,其实就是一个后缀,实际AssetBundle的名字会添加这个后缀。如果有不同分辨率的同名资源,可以使用这个来做区分。 string[] bundlesWithVariant = m_AssetBundleManifest.GetAllAssetBundlesWithVariant(); string[] split = assetBundleName.Split('.'); int bestFit = int.MaxValue; int bestFitIndex = -1; // Loop all the assetBundles with variant to find the best fit variant assetBundle. // 便利所有有variant的资源包,查找最匹配的variant资源 for (int i = 0; i < bundlesWithVariant.Length; i++) { string[] curSplit = bundlesWithVariant[i].Split('.'); if (curSplit[0] != split[0]) { continue; } int found = System.Array.IndexOf(m_ActiveVariants, curSplit[1]); // If there is no active variant found. We still want to use the first if (found == -1) { found = int.MaxValue - 1; } if (found < bestFit) { bestFit = found; bestFitIndex = i; } } if (bestFit == int.MaxValue - 1) { Debug.LogWarning( "Ambigious asset bundle variant chosen because there was no matching active variant: " + bundlesWithVariant[bestFitIndex]); } if (bestFitIndex != -1) { return(bundlesWithVariant[bestFitIndex]); } else { return(assetBundleName); } }
public virtual void SetManifest(AssetBundleManifest obj) { foreach (var v in obj.GetAllAssetBundlesWithVariant()) { var splits = v.Split('.'); if (!_bundlesWithVariant.ContainsKey(splits[0])) { _bundlesWithVariant.Add(splits[0], new HashSet <string>()); } _bundlesWithVariant[splits[0]].Add(splits[1]); } var _allAssetBundle = obj.GetAllAssetBundles(); if (_allAssetBundle.Length == 0) { _logger.InfoFormat("!!!!!!!!!!!! the _allAssetBundle is null !!!!!!!!!!!!!"); } else { _logger.InfoFormat("!*!*!*!*!*!*!*!* _allAssetBundle.Length={0} ********", _allAssetBundle.Length); } HashSet <string> bundles = new HashSet <string>(); for (int i = 0; i < _allAssetBundle.Length; i++) { bundles.Add(_allAssetBundle[i]); } for (int j = 0; j < _allAssetBundle.Length; j++) { var temp = _allAssetBundle[j]; //_logger.InfoFormat("!*!*!*!*!*!*!*!* {0} {1} !!!!!!!!",temp,temp1); if (bundles.Contains(string.Format("{0}_lq", temp))) { if (!_bundlesEndofLQ.ContainsKey(temp)) { _bundlesEndofLQ.Add(temp, string.Format("{0}_lq", temp)); _logger.InfoFormat("********{0}******{1}", temp, string.Format("{0}_lq", temp)); } } } if (_bundlesEndofLQ.ContainsKey("level")) { _bundlesEndofLQ.Remove("level"); } }
public AssetBundleUpdateInfo(int version, string outPutPath, AssetBundleManifest manifest) { CurrentVersion = version; TargetVersion = version; var allAssetBundles = manifest.GetAllAssetBundles(); AllAssetBundlesWithVariant = manifest.GetAllAssetBundlesWithVariant(); PendingList = new Dictionary <string, AssetBundleInfo>(); PendingList.Add(Utility.GetPlatformName(), GetManifestAssetBundleInfo(outPutPath)); foreach (string assetBundle in allAssetBundles) { PendingList.Add(assetBundle, new AssetBundleInfo(assetBundle, outPutPath, manifest)); } }
// Remaps the asset bundle name to the best fitting asset bundle variant. static protected string RemapVariantName(string assetBundleName) { string[] bundlesWithVariant = m_AssetBundleManifest.GetAllAssetBundlesWithVariant(); // If the asset bundle doesn't have variant, simply return. if (System.Array.IndexOf(bundlesWithVariant, assetBundleName) < 0) { return(assetBundleName); } // Get base bundle name string baseName = assetBundleName.Split('.')[0]; if (UsesExternalBundleVariantResolutionMechanism(baseName)) { return(baseName); } int bestFit = int.MaxValue; int bestFitIndex = -1; // Loop all the assetBundles with variant to find the best fit variant assetBundle. for (int i = 0; i < bundlesWithVariant.Length; i++) { string[] curSplit = bundlesWithVariant[i].Split('.'); string curBaseName = curSplit[0]; string curVariant = curSplit[1]; if (curBaseName != baseName) { continue; } int found = System.Array.IndexOf(m_Variants, curVariant); if (found != -1 && found < bestFit) { bestFit = found; bestFitIndex = i; } } if (bestFitIndex != -1) { return(bundlesWithVariant[bestFitIndex]); } else { return(assetBundleName); } }
// Remaps the asset bundle name to the best fitting asset bundle variant. //再交换assetBundleName来装配asset bundle variant static protected string RemapVariantName(string assetBundleName) { string[] bundlesWithVariant = m_AssetBundleManifest.GetAllAssetBundlesWithVariant(); string[] split = assetBundleName.Split('.'); int bestFit = int.MaxValue; int bestFitIndex = -1; // Loop all the assetBundles with variant to find the best fit variant assetBundle. //循环所有assetBundle variant找到最适合的variant assetBundle for (int i = 0; i < bundlesWithVariant.Length; i++) { string[] curSplit = bundlesWithVariant[i].Split('.'); if (curSplit[0] != split[0]) { continue; } int found = System.Array.IndexOf(m_ActiveVariants, curSplit[1]); // If there is no active variant found. We still want to use the first //如果没有活动的variant找到,我们仍然使用第一个; if (found == -1) { found = int.MaxValue - 1; } if (found < bestFit) { bestFit = found; bestFitIndex = i; } } if (bestFit == int.MaxValue - 1) { Debug.LogWarning("Ambigious asset bundle variant chosen because there was no matching active variant: " + bundlesWithVariant[bestFitIndex]); } if (bestFitIndex != -1) { return(bundlesWithVariant[bestFitIndex]); } else { return(assetBundleName); } }
public static uint CreateStreamingFileManifest(AssetBundleManifest assetBundleManifest) { var allABs = assetBundleManifest.GetAllAssetBundles(); var bundlesWithVariant = assetBundleManifest.GetAllAssetBundlesWithVariant(); var streamingManifest = ScriptableObject.CreateInstance(typeof(FileManifest)) as FileManifest; //读取 bundlesWithVariant var MyVariant = new string[bundlesWithVariant.Length]; for (int i = 0; i < bundlesWithVariant.Length; i++) { var curSplit = bundlesWithVariant[i].Split('.'); MyVariant[i] = bundlesWithVariant[i]; } //读取abinfo List <ABInfo> allABInfos = new List <ABInfo>(); foreach (var abs in allABs) { var abInfo = new ABInfo(abs, 0, 0, 0); var dependencies = assetBundleManifest.GetAllDependencies(abs); abInfo.dependencies = dependencies; allABInfos.Add(abInfo); } //fill data streamingManifest.allAbInfo = allABInfos; streamingManifest.allAssetBundlesWithVariant = bundlesWithVariant; streamingManifest.appNumVersion = CodeVersion.APP_NUMBER; streamingManifest.newAppNumVersion = CodeVersion.APP_NUMBER; streamingManifest.version = CodeVersion.APP_VERSION; //create asset string tmpPath = EditorUtils.GetAssetTmpPath();// Path.Combine(Application.dataPath, BuildScript.TmpPath); EditorUtils.CheckDirectory(tmpPath); var crc32filename = CUtils.GetAssetName(Common.CRC32_FILELIST_NAME); string assetPath = "Assets/" + EditorUtils.TmpPath + crc32filename + ".asset"; AssetDatabase.CreateAsset(streamingManifest, assetPath); //build assetbundle string crc32outfilename = CUtils.GetRightFileName(Common.CRC32_FILELIST_NAME); BuildScript.BuildABs(new string[] { assetPath }, null, crc32outfilename, DefaultBuildAssetBundleOptions); streamingManifest.WriteToFile("Assets/" + EditorUtils.TmpPath + "BuildStreamingAssetsManifest.txt"); Debug.LogFormat("FileManifest Path = {0}/{1};", CUtils.realStreamingAssetsPath, crc32outfilename); return(0); }
private IEnumerator LoadAllBundles() { if (ManifestFile_ == null) { yield break; } string[] bundleRelativePaths = ManifestFile_.GetAllAssetBundlesWithVariant(); for (int i = 0; i < bundleRelativePaths.Length; i++) { string bundlePath = bundleRelativePaths[i]; string bundleUrl = GetBundleUrl(bundlePath); Hash128 hash = ManifestFile_.GetAssetBundleHash(bundlePath); yield return(StartCoroutine(LoadBundle(bundleUrl, hash))); } }
public static int GetAllAssetBundlesWithVariant(IntPtr l) { int result; try { AssetBundleManifest assetBundleManifest = (AssetBundleManifest)LuaObject.checkSelf(l); string[] allAssetBundlesWithVariant = assetBundleManifest.GetAllAssetBundlesWithVariant(); LuaObject.pushValue(l, true); LuaObject.pushValue(l, allAssetBundlesWithVariant); result = 2; } catch (Exception e) { result = LuaObject.error(l, e); } return(result); }
/// <summary> /// 重新映射ASB变体名字 /// </summary> /// <param name="assetBundleName"></param> /// <returns></returns> static protected string RemapVariantName(string assetBundleName) { string[] bundlesWithVariant = s_AssetBundleManifest.GetAllAssetBundlesWithVariant(); string[] split = assetBundleName.Split(','); int bestFit = int.MaxValue; int bestFitIndex = -1; //将所有带有变体的assetBundle循环,以找到最适合的变体assetBundle for (int i = 0; i < bundlesWithVariant.Length; i++) { string[] curSplit = bundlesWithVariant[i].Split(','); if (curSplit[0] != split[0]) { continue; } int found = System.Array.IndexOf(s_ActiveVariants, curSplit[1]); //如果没有发现有效的变体。我们还是要用第一个 if (found == -1) { found = int.MaxValue - 1; } if (found < bestFit) { bestFit = found; bestFitIndex = i; } } if (bestFit == int.MaxValue - 1) { Debug.LogWarning("Ambigious asset bundle variant chosen because there was no matching active variant: " + bundlesWithVariant[bestFitIndex]); } if (bestFitIndex != -1) { return(bundlesWithVariant[bestFitIndex]); } return(assetBundleName); }
// 获取资源包别名 // Remaps the asset bundle name to the best fitting asset bundle variant. string RemapVariantName(string assetBundleName) { // 获取所有资源包别名列表 string[] bundlesWithVariant = m_AssetBundleManifest.GetAllAssetBundlesWithVariant(); // 如果没找到别名,就返回自己的名称 // If the asset bundle doesn't have variant, simply return. if (System.Array.IndexOf(bundlesWithVariant, assetBundleName) < 0) { return(assetBundleName); } string[] split = assetBundleName.Split('.'); int bestFit = int.MaxValue; int bestFitIndex = -1; // Loop all the assetBundles with variant to find the best fit variant assetBundle. for (int i = 0; i < bundlesWithVariant.Length; i++) { string[] curSplit = bundlesWithVariant[i].Split('.'); if (curSplit[0] != split[0]) { continue; } int found = System.Array.IndexOf(m_Variants, curSplit[1]); if (found != -1 && found < bestFit) { bestFit = found; bestFitIndex = i; } } if (bestFitIndex != -1) { return(bundlesWithVariant[bestFitIndex]); } else { return(assetBundleName); } }
string RemapVariantName(string assetBundleName) { string[] splitBundleName = assetBundleName.Split('.'); string variant; if (!bundleVariants.TryGetValue(splitBundleName[0], out variant)) { return(assetBundleName); } string[] bundlesWithVariant = manifest.GetAllAssetBundlesWithVariant(); string newBundleName = splitBundleName [0] + "." + variant; if (System.Array.IndexOf(bundlesWithVariant, newBundleName) < 0) { return(assetBundleName); } return(newBundleName); }
static string RemapVariantName(string assetBundleName) { string[] variants = { }; string[] bundlesWithVariant = m_AssetBundleManifest.GetAllAssetBundlesWithVariant(); if (System.Array.IndexOf(bundlesWithVariant, assetBundleName) < 0) { return(assetBundleName); } string[] split = assetBundleName.Split('.'); int bestFit = int.MaxValue; int bestFitIndex = -1; LogUtil.GetInstance().WriteGame("bundlesWithVariant.Length:" + bundlesWithVariant.Length); for (int i = 0; i < bundlesWithVariant.Length; i++) { string[] curSplit = bundlesWithVariant[i].Split('.'); if (curSplit[0] != split[0]) { continue; } int found = System.Array.IndexOf(variants, curSplit[1]); if (found != -1 && found < bestFit) { bestFit = found; bestFitIndex = i; } } if (bestFitIndex != -1) { return(bundlesWithVariant[bestFitIndex]); } else { return(assetBundleName); } }
// Remaps the asset bundle name to the best fitting asset bundle variant. static protected string RemapVariantName(string assetBundleName) { var bundlesWithVariant = _assetBundleManifest.GetAllAssetBundlesWithVariant(); // If the asset bundle doesn't have variant, simply return. if (Array.IndexOf(bundlesWithVariant, assetBundleName) < 0) { return(assetBundleName); } var split = assetBundleName.Split('.'); var bestFit = int.MaxValue; var bestFitIndex = -1; // Loop all the assetBundles with variant to find the best fit variant assetBundle. for (var i = 0; i < bundlesWithVariant.Length; i++) { var curSplit = bundlesWithVariant[i].Split('.'); if (curSplit[0] != split[0]) { continue; } var found = Array.IndexOf(_variants, curSplit[1]); if (found != -1 && found < bestFit) { bestFit = found; bestFitIndex = i; } } if (bestFitIndex != -1) { return(bundlesWithVariant[bestFitIndex]); } return(assetBundleName); }
public static void Combine() { int count = MANIFESTS.Count; List <string> ns = new List <string>(); List <string> vs = new List <string>(); for (int i = 0; i < count; i++) { AssetBundleManifest manifest = MANIFESTS[i]; string[] allAssetBundles = manifest.GetAllAssetBundles(); string[] allVariants = manifest.GetAllAssetBundlesWithVariant(); ns.AddRange(allAssetBundles); vs.AddRange(allVariants); foreach (string n in allAssetBundles) { DEPENDENCIES[n] = manifest.GetAllDependencies(n); HASHS[n] = manifest.GetAssetBundleHash(n); } } _bundles = ns.ToArray(); _variants = vs.ToArray(); MANIFESTS.Clear(); }
private string RemapVariantName(string bundleName) { string[] bundlesWithVariant = m_AssetManifest.GetAllAssetBundlesWithVariant(); string[] split = bundleName.Split('.'); if (Array.FindIndex(bundlesWithVariant, (find) => { return(find.Split('.')[0].Equals(split[0])); }) < 0) { return(bundleName); } int bestFit = int.MaxValue; int bestFitIndex = -1; for (int i = 0; i < bundlesWithVariant.Length; i++) { string[] curSplit = bundlesWithVariant[i].Split('.'); if (curSplit[0] == split[0]) { int found = Utilities.VariantType.ToString().IndexOf(curSplit[1]); if (found != -1 && found < bestFit) { bestFit = found; bestFitIndex = i; } } } if (bestFitIndex != -1) { return(bundlesWithVariant[bestFitIndex]); } return(bundleName); }