Exemple #1
0
        //根据打包后的Manifest刷新XML
        public void RefreshXMLTableByManifest(AssetBundleManifest manifest)
        {
            HashSet <string> bundleHash = new HashSet <string>();

            foreach (var t in XMLTable.BundleInfos)
            {
                var defaultBundleName = t.GetBundleNameWithLangExtension(eAssetLanguageVarType.Default);
                var dependences       = manifest.GetAllDependencies(defaultBundleName);
                t.dependenceBundleName = new string[dependences.Length];
                for (int i = 0; i < dependences.Length; i++)
                {
                    t.dependenceBundleName[i] = AssetI8NHelper.GetBundleNameWithOutLangStr(dependences[i]);
                }
                var hash = manifest.GetAssetBundleHash(defaultBundleName);
                if (bundleHash.Contains(hash.ToString()))
                {
                    //fileHash重名的,打印出来,并且使用bundleName来合并,避免冲突
                    t.bundleFileName = defaultBundleName + "_" + hash.ToString();
                    CommonLog.Error(string.Format("卧槽,有bundleFileHash冲突,bundle信息为,bundleName:{0},bundleHash:{1},asset:{2}"
                                                  , defaultBundleName, hash.ToString(), t.assets[0].resPath));
                }
                else
                {
                    bundleHash.Add(defaultBundleName);
                    t.bundleFileName = defaultBundleName;
                }
            }
        }
Exemple #2
0
 /// <summary>
 /// 获取BundleName带语言后缀名
 /// </summary>
 /// <param name="lang"></param>
 /// <returns></returns>
 public string GetBundleFileNameWithLangExtension(eAssetLanguageVarType lang)
 {
     if (hasOtherLanguage)
     {
         return(AssetI8NHelper.GetLangBundleStr(bundleFileName, lang) + BundleExtension);
     }
     else
     {
         return(bundleFileName + BundleExtension);
     }
 }
Exemple #3
0
 /// <summary>
 /// 获取BundleName带语言后缀名
 /// </summary>
 /// <param name="lang"></param>
 /// <returns></returns>
 public string GetBundleNameWithLangExtension(eAssetLanguageVarType lang)
 {
     if (hasOtherLanguage)
     {
         return(AssetI8NHelper.GetLangBundleStr(bundleNameMD5Struct.GetMD5Str(!isComplexName), lang));
     }
     else
     {
         return(bundleNameMD5Struct.GetMD5Str(!isComplexName));
     }
 }
Exemple #4
0
        /// <summary>
        /// 通过XML生成BuildMap
        /// </summary>
        private void CollectABBuildMap()
        {
            //收集所有AssetBundle文件夹
            var abInfo = new AssetBundleBuild[AssetBundleRawInfoList.Count];
            Dictionary <string, List <string> > assetBundleDict = new Dictionary <string, List <string> >();

            for (int i = 0; i < abInfo.Length; i++)
            {
                var xmlInfo = AssetBundleRawInfoList[i];

                if (IsOpenProgressUI)
                {
                    EditorUtility.DisplayProgressBar("Loading", xmlInfo.assetFullName, (float)i / abInfo.Length);
                }

                ////先刷新Import
                ////修改bundle名
                //AssetImporter ai = AssetImporter.GetAtPath(xmlInfo.assetFullName);
                //
                //ai.assetBundleName = xmlInfo.bundleName;
                //
                //if (xmlInfo.HasOtherLanguage) { ai.assetBundleVariant = AssetI8NHelper.GetLangBundleVariantStr(xmlInfo.Language); }
                //else
                //{
                //    ai.assetBundleVariant = null;
                //}
                var info = new AssetBundleBuild();
                info.assetBundleName = xmlInfo.bundleMD5Struct.GetMD5Str(!xmlInfo.isComplexName);
                if (xmlInfo.HasOtherLanguage)
                {
                    info.assetBundleVariant = AssetI8NHelper.GetLangBundleVariantStr(xmlInfo.Language);
                }
                else
                {
                    info.assetBundleVariant = null;
                }
                info.addressableNames = new string[] { xmlInfo.resPath.ToLower() };
                info.assetNames       = new string[] { xmlInfo.assetFullName };

                abInfo[i] = info;
            }

            this.BuildMap = abInfo;
        }
    private static List <AssetBundleXMLRawData> RefreshNewNameAndGetAssetBundleList()
    {
        List <AssetBundleXMLRawData> list = new List <AssetBundleXMLRawData>();
        //非Default的资源
        List <AssetBundleXMLRawData> foreignlist = new List <AssetBundleXMLRawData>();

        bool checkConfig = AssetBundleBuilderExtSetting.Instance.InitProjectSettingFromFile();

        if (!checkConfig)
        {
            return(null);
        }

        var paths = AssetDatabase.GetAllAssetPaths();

        bool isBreak = false;

        for (int i = 0; i < paths.Length; i++)
        {
            var path = paths[i];

            if (!path.Contains("."))
            {
                continue;
            }

            //不需要打包的文件类型
            if (!CheckNeedPackFile(path))
            {
                continue;
            }

            if (!path.Contains("/AssetBundles/") &&
                !AssetBundleBuilderExtSetting.Instance.CheckIsInExtFolderAsset(path) &&
                !AssetBundleBuilderExtSetting.Instance.CheckIsSpriteInTagAsset(path))
            {
                continue;
            }

            //if (!path.Contains("/AssetBundles/")) continue;

            //不导文件夹
            if (AssetDatabase.IsValidFolder(path))
            {
                continue;
            }

            //是否取消打包
            isBreak = EditorUtility.DisplayCancelableProgressBar("Loading", path, (float)i / paths.Length);
            if (isBreak)
            {
                CommonLog.Log("终止打包");
                return(null);
            }

            AssetBundleXMLRawData xmlRawData = new AssetBundleXMLRawData();

            var extensionName =
                Path.GetExtension(path); //path.Remove(0,path.LastIndexOf(".", StringComparison.Ordinal));
            var withoutExtensionPath =
                path.Replace(extensionName,
                             string.Empty); //path.Substring(0, path.LastIndexOf(".", StringComparison.Ordinal));


            int abResourceStartIndex = withoutExtensionPath.LastIndexOf("AssetBundles", StringComparison.Ordinal);
            var resPath = AssetI8NHelper.GetDefaultPathLanguage(abResourceStartIndex >= 0
                ? withoutExtensionPath.Substring(abResourceStartIndex)
                : withoutExtensionPath);

            //剔除 Assets/
            if (resPath.StartsWith("Assets/"))
            {
                int startIndex = resPath.IndexOf("/", StringComparison.Ordinal) + 1;
                resPath = resPath.Substring(startIndex);
            }

            var langType = AssetI8NHelper.GetPathLanguage(path);

            xmlRawData.resPath = resPath;

            xmlRawData.resPathMD5Struct = MD5Creater.Md5Struct(xmlRawData.resPath);

            xmlRawData.Language = langType;

            string fileName   = Path.GetFileNameWithoutExtension(resPath);
            string bundleName =
                Path.GetDirectoryName(resPath.Substring(0, resPath.LastIndexOf("/", StringComparison.Ordinal)));

            //设置bundleName,使用时,使用下面的MD5
            xmlRawData.bundleName =
                AssetBundleBuilderExtSetting.Instance.GetGroupMappedBundlePath(xmlRawData.resPath, extensionName);

            xmlRawData.bundleMD5Struct =
                MD5Creater.Md5Struct(
                    AssetBundleBuilderExtSetting.Instance.GetGroupMappedBundlePath(xmlRawData.resPath, extensionName));

            //fullName带后缀名
            //int assetStartIndex = path.IndexOf("Assets", StringComparison.Ordinal);
            xmlRawData.assetFullName = path; //path.Substring(assetStartIndex);

            //int resStartIndex = resPath.LastIndexOf("/", StringComparison.Ordinal) + 1;
            xmlRawData.resShortName = Path.GetFileName(resPath); //resPath.Substring(resStartIndex);

            xmlRawData.OtherLanguages[(int)langType] = true;
            list.Add(xmlRawData);

            foreignlist.Add(xmlRawData);
        }

        //第二遍开始计算asset的多语言信息
        foreach (var xmlRaw in list)
        {
            if (xmlRaw.Language == eAssetLanguageVarType.Default)
            {
                foreach (var xmlForeign in foreignlist)
                {
                    if (xmlForeign.bundleName == xmlRaw.bundleName)
                    {
                        xmlRaw.OtherLanguages[(int)xmlForeign.Language] = true;
                    }
                }
            }
        }


        return(list);
    }
Exemple #6
0
    protected virtual string FindAssetPath(string name)
    {
        /* search assets */
        if (EditorKeyPathWithRealPath == null)
        {
            EditorKeyPathWithRealPath = new Dictionary <string, string[]>();

            var assetGuids = AssetDatabase.FindAssets("", new string[] { "Assets/Game", "Assets/AssetBundles", "Assets/Configs" });

            AllEditorAssetsPath.Clear();
            foreach (var data in assetGuids)
            {
                AllEditorAssetsPath.Add(AssetDatabase.GUIDToAssetPath(data));
            }

            foreach (var path in AllEditorAssetsPath)
            {
                if (path.Contains(".meta"))
                {
                    continue;
                }

                if (path.Contains(".psd") || path.Contains(".tga"))
                {
                    continue;
                }

                if (path.Contains(".mp3") || path.Contains(".wav"))
                {
                    continue;
                }

                //必须是AB目录下的文件
                //if (p.Contains(ABAssetStart) && p.Contains(".") && !AssetDatabase.IsValidFolder(p))
                if (path.Contains(".") && !AssetDatabase.IsValidFolder(path))
                {
                    //排除其他语言格式
                    bool otherLan = false;
                    foreach (var lan in System.Enum.GetNames(typeof(eAssetLanguageVarType)))
                    {
                        if (lan == "Default")
                        {
                            continue;
                        }
                        if (path.Contains("." + lan))
                        {
                            otherLan = true;
                        }
                    }
                    if (otherLan)
                    {
                        continue;
                    }

                    var bundlePath = GetAssetBundlePath(path);
                    if (string.IsNullOrEmpty(bundlePath))
                    {
                        continue;
                    }

                    EditorKeyPathWithRealPath[bundlePath] = new string[(int)eAssetLanguageVarType._Size_] {
                        path, null, null, null, null
                    };

                    var hashSet = new HashSet <eAssetLanguageVarType>
                    {
                        eAssetLanguageVarType.Default
                    };
                }
            }
            //加入存在的语言
            foreach (var path in AllEditorAssetsPath)
            {
                if (path.Contains(".meta"))
                {
                    continue;
                }

                if (path.Contains(".psd") || path.Contains(".tga"))
                {
                    continue;
                }

                if (path.Contains(".mp3") || path.Contains(".wav"))
                {
                    continue;
                }

                //必须是AB目录下的文件
                //if (p.Contains(ABAssetStart) && p.Split('.').Length > 2 && !AssetDatabase.IsValidFolder(p))
                if (path.Split('.').Length > 2 && !AssetDatabase.IsValidFolder(path))
                {
                    //排除其他语言格式
                    var lanType = AssetI8NHelper.GetPathLanguage(path.Replace(Path.GetExtension(path), ""));
                    if (lanType == eAssetLanguageVarType.Default)
                    {
                        continue;
                    }

                    var bundlePath = GetAssetBundlePath(path);
                    if (string.IsNullOrEmpty(bundlePath))
                    {
                        continue;
                    }

                    var assetPath = bundlePath.Replace(AssetI8NHelper.GetLangFileExtensionStr(lanType), "");
                    if (EditorKeyPathWithRealPath.ContainsKey(assetPath))
                    {
                        EditorKeyPathWithRealPath[assetPath][(int)lanType] = path;
                    }
                    else
                    {
                        CommonLog.Error("未找到多语言资源,资源:{0} ,不存在对应的原始资源:{1}", path, assetPath);
                    }
                }
            }
        }

        string[] assetpath = null;
        var      hasRes    = EditorKeyPathWithRealPath.TryGetValue(name, out assetpath);

        if (hasRes)
        {
            //检查是否有其他语言
            if (AssetLanguageVar != eAssetLanguageVarType.Default &&
                EditorKeyPathWithRealPath[name][(int)AssetLanguageVar] != null)
            {
                return(assetpath[(int)AssetLanguageVar]);
            }
            return(assetpath[0]);
        }
        else
        {
            return(null);
        }
    }