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