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 #2
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);
        }
    }