377 lines
13 KiB
C#
377 lines
13 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using GameEditor.Core;
|
|
using GameEditor.GameEditor.PlayerBuilder;
|
|
using GameLogic;
|
|
using System.Diagnostics;
|
|
using ResUpdate;
|
|
using System.Threading;
|
|
using System;
|
|
|
|
namespace GameEditor.FrameTool
|
|
{
|
|
enum LanguageType {
|
|
ZH,
|
|
EN,
|
|
VI
|
|
};
|
|
|
|
public class ArtFontWindow : EditorWindow
|
|
{
|
|
|
|
string m_ImportRootPath = Environment.CurrentDirectory + "\\Assets\\ManagedResources";
|
|
|
|
string m_ArtFontPath;
|
|
static string[] m_Files;
|
|
static LanguageType m_Language = LanguageType.EN;
|
|
static bool m_ChooseAll;
|
|
static bool[] m_Choose;
|
|
static string m_Bench;
|
|
Dictionary<LanguageType, Dictionary<string, string>> m_Config;
|
|
Dictionary<LanguageType, List<string>> m_ArtFontLists;
|
|
Dictionary<string, string> m_ImportArt;
|
|
Dictionary<string, string> m_UnImportArt;
|
|
|
|
private void OnEnable()
|
|
{
|
|
m_ArtFontPath = EditorPrefs.GetString("m_ArtFontPath");
|
|
m_ArtFontLists = new Dictionary<LanguageType, List<string>>();
|
|
m_ImportArt = new Dictionary<string, string>();
|
|
m_UnImportArt = new Dictionary<string, string>();
|
|
|
|
m_Config = new Dictionary<LanguageType, Dictionary<string, string>>();
|
|
Dictionary<string, string> en = new Dictionary<string, string>();
|
|
en.Add("path", "简中_英");
|
|
en.Add("endStr", "_en");
|
|
en.Add("dicStr", "part");
|
|
en.Add("importDic", "ArtFont_en");
|
|
m_Config.Add(LanguageType.EN, en);
|
|
Dictionary<string, string> vi = new Dictionary<string, string>();
|
|
vi.Add("path", "简中_越南语");
|
|
vi.Add("endStr", "_vi");
|
|
vi.Add("dicStr", "202");
|
|
vi.Add("importDic", "ArtFont_vi");
|
|
m_Config.Add(LanguageType.VI, vi);
|
|
}
|
|
|
|
// Add menu named "My Window" to the Window menu
|
|
[MenuItem("LanguageTool/ArtFont/导入资源工具")]
|
|
static void Init()
|
|
{
|
|
|
|
// Get existing open window or if none, make a new one:
|
|
ArtFontWindow window = (ArtFontWindow)EditorWindow.GetWindow(typeof(ArtFontWindow));
|
|
window.Show();
|
|
window.InitWindow();
|
|
|
|
}
|
|
|
|
void InitWindow()
|
|
{
|
|
InitSize();
|
|
InitGames();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 初始化大小
|
|
/// </summary>
|
|
void InitSize()
|
|
{
|
|
//minSize = new Vector2(600, 400);
|
|
//maxSize = new Vector2(600, 650);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 初始化游戏
|
|
/// </summary>
|
|
void InitGames()
|
|
{
|
|
LoadDic();
|
|
}
|
|
|
|
void OnGUI()
|
|
{
|
|
|
|
EditorGUILayout.BeginVertical();
|
|
EditorGUILayout.Space();
|
|
|
|
EditorGUILayout.LabelField("本地化文件夹路径 svn://60.1.1.230/jieling/document/美术/本地化 对应的本地文件夹:", GUILayout.Width(600f));
|
|
GUILayout.BeginHorizontal();
|
|
//GUILayout.Label("源文件路径:", GUILayout.ExpandWidth(false));
|
|
this.m_ArtFontPath = GUILayout.TextField(m_ArtFontPath, GUILayout.Width(450f));
|
|
if (GUILayout.Button("选择文件夹", GUILayout.ExpandWidth(false)))
|
|
{
|
|
this.m_ArtFontPath = EditorUtility.OpenFolderPanel("Resource path", m_ArtFontPath, Application.dataPath);
|
|
EditorPrefs.SetString("m_ArtFontPath", m_ArtFontPath);
|
|
LoadDic();
|
|
}
|
|
GUILayout.EndHorizontal();
|
|
|
|
EditorGUILayout.LabelField("请选择语言:");
|
|
GUILayout.BeginHorizontal();
|
|
//for (int i = 0; i < m_Config.Count; i++)
|
|
//{
|
|
foreach(KeyValuePair<LanguageType, Dictionary<string, string>> config in m_Config)
|
|
{
|
|
|
|
if (EditorGUILayout.ToggleLeft(config.Value["path"], m_Language == config.Key))
|
|
{
|
|
if (m_Language != config.Key)
|
|
{
|
|
m_Language = config.Key;
|
|
LoadDic();
|
|
}
|
|
}
|
|
}
|
|
//}
|
|
GUILayout.EndHorizontal();
|
|
|
|
EditorGUILayout.LabelField("请选择文件夹:");
|
|
if (m_Files != null && m_Files.Length != 0)
|
|
{
|
|
m_ChooseAll = EditorGUILayout.ToggleLeft("全部", m_ChooseAll);
|
|
GUILayout.BeginHorizontal();
|
|
for (int i = 0; i < m_Files.Length; i++)
|
|
{
|
|
string fileName = Path.GetFileName(m_Files[i]);
|
|
m_Choose[i] = EditorGUILayout.ToggleLeft(fileName, m_Choose[i] && !m_ChooseAll);
|
|
|
|
if (i % 4 == 3)
|
|
{
|
|
GUILayout.EndHorizontal();
|
|
GUILayout.BeginHorizontal();
|
|
}
|
|
}
|
|
GUILayout.EndHorizontal();
|
|
}
|
|
else
|
|
{
|
|
EditorGUILayout.LabelField(" 未找到文件夹");
|
|
}
|
|
|
|
|
|
if (GUILayout.Button("导入", GUILayout.Height(50)))
|
|
{
|
|
m_ImportArt.Clear();
|
|
m_UnImportArt.Clear();
|
|
m_ArtFontLists[LanguageType.ZH] = GetAllArtFont(LanguageType.ZH);
|
|
if (m_ChooseAll)
|
|
{
|
|
for (int i = 0; i < m_Files.Length; i++)
|
|
{
|
|
string dirPath = m_Files[i];
|
|
ImportDirectoryTex(dirPath);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
for (int i = 0; i < m_Choose.Length; i++)
|
|
{
|
|
if (m_Choose[i])
|
|
{
|
|
string dirPath = m_Files[i];
|
|
ImportDirectoryTex(dirPath);
|
|
}
|
|
}
|
|
}
|
|
|
|
// 刷新导入的资源
|
|
AssetDatabase.Refresh();
|
|
// 检测导入资源的尺寸是否符合要求
|
|
CheckImportFileSize();
|
|
//
|
|
UnityEngine.Debug.LogWarning("导入成功的资源:" + m_ImportArt.Count);
|
|
foreach (KeyValuePair<string, string> v in m_ImportArt)
|
|
{
|
|
UnityEngine.Debug.Log(String.Format("{0}->{1}", v.Key, v.Value));
|
|
}
|
|
if(m_UnImportArt.Count > 0)
|
|
{
|
|
UnityEngine.Debug.LogError("导入失败的资源:"+ m_UnImportArt.Count);
|
|
foreach (KeyValuePair<string, string> v in m_UnImportArt)
|
|
{
|
|
UnityEngine.Debug.LogError(String.Format("{0}, 失败原因:{1}", v.Key, v.Value));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
// 加载本地化路径文件夹数据
|
|
private void LoadDic()
|
|
{
|
|
string path = m_ArtFontPath + "/" + m_Config[m_Language]["path"];
|
|
if (!string.IsNullOrEmpty(path) && Directory.Exists(path))
|
|
{
|
|
string[] t_Files = Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly);
|
|
List<string> t_l_Files = t_Files.ToList();
|
|
for (int i = 0; i < t_Files.Length; i++)
|
|
{
|
|
string fileName = Path.GetFileName(t_Files[i]);
|
|
if (!fileName.StartsWith(m_Config[m_Language]["dicStr"]))
|
|
{
|
|
t_l_Files.Remove(t_Files[i]);
|
|
}
|
|
}
|
|
m_Files = t_l_Files.ToArray();
|
|
m_Choose = new bool[m_Files.Length];
|
|
}
|
|
}
|
|
|
|
// 按文件夹导入文件
|
|
private void ImportDirectoryTex(string dirPath)
|
|
{
|
|
string[] t_Files = Directory.GetFiles(dirPath, "*", SearchOption.TopDirectoryOnly);
|
|
for (int i = 0; i < t_Files.Length; i++)
|
|
{
|
|
EditorUtility.DisplayProgressBar(dirPath, string.Format("({0}/{1}):{2}", i, t_Files.Length, t_Files[i]), (float)i / t_Files.Length);
|
|
ImportSingleTex(t_Files[i]);
|
|
}
|
|
EditorUtility.ClearProgressBar();
|
|
}
|
|
|
|
// 导入单个文件
|
|
private void ImportSingleTex(string filePath)
|
|
{
|
|
|
|
UnityEngine.Debug.Log(string.Format("import file: {0}", filePath));
|
|
if (File.Exists(filePath))
|
|
{
|
|
//CheckFileSize(filePath);
|
|
string o_Name = Path.GetFileName(filePath);
|
|
string fix_Name = CheckFileName(o_Name);
|
|
if (!fix_Name.Equals(o_Name))
|
|
{
|
|
UnityEngine.Debug.LogWarning(string.Format("file name fixed: {0}->{1}", o_Name, fix_Name));
|
|
}
|
|
string importPath = m_ImportRootPath + "/" + m_Config[m_Language]["importDic"] + "/" + fix_Name;
|
|
if (HasChineseArtFont(fix_Name))
|
|
{
|
|
|
|
if (File.Exists(importPath))
|
|
{
|
|
File.Delete(importPath);
|
|
}
|
|
if(File.Exists(Path.ChangeExtension(importPath, ".png"))){
|
|
|
|
File.Delete(Path.ChangeExtension(importPath, ".png"));
|
|
}
|
|
if (File.Exists(Path.ChangeExtension(importPath, ".jpg")))
|
|
{
|
|
File.Delete(Path.ChangeExtension(importPath, ".jpg"));
|
|
}
|
|
|
|
File.Copy(filePath, importPath);
|
|
m_ImportArt.Add(filePath, importPath);
|
|
}
|
|
else
|
|
{
|
|
m_UnImportArt.Add(filePath, "未找到对应的中文路径");
|
|
}
|
|
}
|
|
}
|
|
|
|
// 判断在中文资源种是否存在
|
|
private bool HasChineseArtFont(string fileName)
|
|
{
|
|
|
|
foreach (string path in m_ArtFontLists[LanguageType.ZH])
|
|
{
|
|
string zhName = Path.GetFileNameWithoutExtension(path);
|
|
zhName = zhName.Substring(0, zhName.Length-3);
|
|
string trName = Path.GetFileNameWithoutExtension(fileName);
|
|
trName = trName.Substring(0, trName.Length-3);
|
|
if (zhName.Equals(trName))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private List<string> GetAllArtFont(LanguageType language)
|
|
{
|
|
string directoryName = "";
|
|
if(language == LanguageType.ZH)
|
|
{
|
|
directoryName = "ArtFont";
|
|
}
|
|
else if(language == LanguageType.EN)
|
|
{
|
|
directoryName = "ArtFont_en";
|
|
}
|
|
else if (language == LanguageType.VI)
|
|
{
|
|
directoryName = "ArtFont_vi";
|
|
}
|
|
string dirPath = Environment.CurrentDirectory + "\\Assets\\ManagedResources";
|
|
List<string> flist = new List<string>();
|
|
List<string> dirs = new List<string>(Directory.GetDirectories(dirPath, directoryName, SearchOption.AllDirectories));
|
|
for (int i = 0; i < dirs.Count; i++)
|
|
{
|
|
string[] files = Directory.GetFiles(dirs[i]);
|
|
for (int j = 0; j < files.Length; j++)
|
|
{
|
|
flist.Add(files[j]);
|
|
}
|
|
}
|
|
return flist;
|
|
}
|
|
|
|
// 检测导入文件的大小是否符合要求
|
|
private void CheckImportFileSize()
|
|
{
|
|
int i = 0;
|
|
foreach(KeyValuePair<string, string> v in m_ImportArt)
|
|
{
|
|
i++;
|
|
EditorUtility.DisplayProgressBar("修正导入资源的像素大小", string.Format("({0}/{1}):{2}", i, m_ImportArt.Count, v.Value), (float)i / m_ImportArt.Count);
|
|
CheckFileSize(v.Value);
|
|
}
|
|
EditorUtility.ClearProgressBar();
|
|
AssetDatabase.Refresh();
|
|
}
|
|
|
|
// 检测文件大小是否符合要求
|
|
private void CheckFileSize(string filePath)
|
|
{
|
|
if (File.Exists(filePath))
|
|
{
|
|
filePath = filePath.Replace(Environment.CurrentDirectory+"\\", "");
|
|
LJ_OptTools.TextureOptUtilities.RemoveBigTexPackageTag(filePath);
|
|
LJ_OptTools.TextureOptUtilities.ExtendTexture(filePath);
|
|
}
|
|
else
|
|
{
|
|
UnityEngine.Debug.LogError("检测文件像素大小失败,未找到文件:" + filePath);
|
|
}
|
|
}
|
|
|
|
// 文件名检测返回正确的
|
|
private string CheckFileName(string fileNameExt)
|
|
{
|
|
if (fileNameExt.EndsWith(".png.png")|| fileNameExt.EndsWith(".jpg.jpg"))
|
|
{
|
|
fileNameExt = fileNameExt.Substring(0, fileNameExt.Length - 3);
|
|
}
|
|
string fileName = Path.GetFileNameWithoutExtension(fileNameExt);
|
|
string ext = Path.GetExtension(fileNameExt);
|
|
if (fileName.EndsWith("_zh") || fileName.EndsWith("_en") || fileName.EndsWith("_vi"))
|
|
{
|
|
fileName = fileName.Substring(0, fileName.Length - 3);
|
|
}
|
|
|
|
return fileName + m_Config[m_Language]["endStr"] + ext;
|
|
}
|
|
|
|
}
|
|
|
|
}
|