예제 #1
0
    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());
        }
    }
예제 #2
0
        /// <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);
            }
        }
예제 #3
0
    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);
        }
    }
예제 #4
0
        /// <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;
                }
            }
        }
예제 #5
0
    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);
        }
    }
예제 #6
0
	// 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;
	}
예제 #7
0
    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();
        }
    }
예제 #8
0
    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);
    }
예제 #9
0
        /// <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);
                }
            }
        }
예제 #10
0
        // 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);
            }
        }
예제 #11
0
        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();
        }
예제 #12
0
        // 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);
            }
        }
예제 #13
0
        // 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());
        }
예제 #15
0
    //根据当前的变体决定正确的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);
        }
    }
예제 #16
0
        // 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);
            }
        }
예제 #17
0
        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));
            }
        }
예제 #19
0
        // 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);
            }
        }
예제 #20
0
        // 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);
            }
        }
예제 #21
0
        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);
        }
예제 #22
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)));
     }
 }
예제 #23
0
    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);
    }
예제 #24
0
        /// <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);
        }
예제 #25
0
        // 获取资源包别名
        // 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);
    }
예제 #27
0
    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);
        }
    }
예제 #28
0
        // 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);
        }
예제 #29
0
        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();
        }
예제 #30
0
        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);
        }