源战役客户端
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 

221 linhas
9.4 KiB

/*
字符串替换工具
*/
using UnityEditor;
using UnityEngine;
using System.IO;
public class QuickReplaceWordsTool : EditorWindow
{
enum FileType : int//文件类型
{
All = 0,
Lua = 1,
Prefab = 2,
Csv = 3,
Txt = 4,
}
enum OpType : int//操作类型
{
Common = 1, //普通操作
SwitchToSpecial = 2, //快速替换中文标点符号为特殊字符串
SwitchToBack = 3, //快速还原特殊字符串为中文标点符号
}
private static string luaPath = @"H:\Tomorrow\develop\code\u3d\Lua";
private static string prefabPath = @"H:\Tomorrow\develop\code\u3d\Assets\LuaFramework\AssetBundleRes\ui";
private static string csvPath = @"H:\Tomorrow\develop\exchange";
private static string txtPath = @"H:\Tomorrow\develop\exchange";
static string replaceWord_last = "文本批量替换脚本QuickReplaceWordsTool";
static string replaceWord_new = "文本批量替换脚本QuickReplaceWordsTool";
[MenuItem("Tools/Quick Replace Words Tool")]
public static void ShowWindow()
{
EditorWindow.GetWindow(typeof(QuickReplaceWordsTool));
}
void OnGUI()
{
GUILayout.Label("字符串替换:", EditorStyles.boldLabel);
GUILayout.Label("被替换的单词为:", EditorStyles.boldLabel);
replaceWord_last = EditorGUILayout.TextArea(replaceWord_last);
GUILayout.Label("替换后的单词为:", EditorStyles.boldLabel);
replaceWord_new = EditorGUILayout.TextArea(replaceWord_new);
GUILayout.Label("替换Lua脚本的路径为:", EditorStyles.boldLabel);
luaPath = EditorGUILayout.TextArea(luaPath);
if (GUILayout.Button("替换lua脚本文件")) ShowWarnTip(OpType.Common,FileType.Lua,"替换lua脚本文件");
GUILayout.Label("替换prefab的路径为:", EditorStyles.boldLabel);
prefabPath = EditorGUILayout.TextArea(prefabPath);
if (GUILayout.Button("替换prefab文件")) ShowWarnTip(OpType.Common,FileType.Prefab,"替换prefab文件");
GUILayout.Label("替换csv的路径为:", EditorStyles.boldLabel);
csvPath = EditorGUILayout.TextArea(csvPath);
if (GUILayout.Button("替换csv文件")) ShowWarnTip(OpType.Common,FileType.Csv,"替换csv文件");
GUILayout.Label("替换txt的路径为:", EditorStyles.boldLabel);
txtPath = EditorGUILayout.TextArea(txtPath);
if (GUILayout.Button("替换txt文件")) ShowWarnTip(OpType.Common,FileType.Txt,"替换txt文件");
GUILayout.Label("\n外文翻译的时候,需要翻译之前处理中文符号,\n翻译操作后还原,避免中文符号引起的部分匹配问题。\n详见ReplaceWordsToolTest脚本", EditorStyles.boldLabel);
if (GUILayout.Button("快速替换中文标点符号为特殊字符串")) ShowWarnTip(OpType.SwitchToSpecial, FileType.All,"快速替换中文标点符号为特殊字符串");
if (GUILayout.Button("快速还原特殊字符串为中文标点符号")) ShowWarnTip(OpType.SwitchToBack, FileType.All,"快速还原特殊字符串为中文标点符号");
}
static void ShowWarnTip(OpType opType, FileType fileType, string tipLabel){
if (EditorUtility.DisplayDialog("!!替换请确认!!", "!!请留意确定你的操作!!\n!!请留意确定你的操作!!\n!!请确认替换路径!!\n确认进行" + tipLabel, "确定"))
{
SetPathFileWord(opType, fileType);
}
}
//要处理的目录
static void SetPathFileWord(OpType opType, FileType fileType)
{
string modify_path = luaPath;
string prefab_path = prefabPath;
string csv_path = csvPath;
string txt_path = txtPath;
string[] curPrefabs = { "", "", "" };
int startIndex = 0;
string[] files = {};
string[] filesLua = {};
string[] filesCsv = {};
string[] filesPrefab = {};
string[] filesTxt = {};
switch (fileType)
{
case FileType.All:
filesCsv = Directory.Exists(csv_path)?Directory.GetFiles(csv_path, "*.csv", SearchOption.AllDirectories):filesCsv;
filesPrefab = Directory.Exists(prefab_path)?Directory.GetFiles(prefab_path, "*.prefab", SearchOption.AllDirectories):filesPrefab;
filesLua = Directory.Exists(modify_path)?Directory.GetFiles(modify_path, "*.lua", SearchOption.AllDirectories):filesLua;
filesTxt = Directory.Exists(txt_path)?Directory.GetFiles(txt_path, "*.txt", SearchOption.AllDirectories):filesTxt;
break;
case FileType.Csv:
files = Directory.Exists(csv_path)?Directory.GetFiles(csv_path, "*.csv", SearchOption.AllDirectories):files;
break;
case FileType.Prefab:
files = Directory.Exists(prefab_path)?Directory.GetFiles(prefab_path, "*.prefab", SearchOption.AllDirectories):files;
break;
case FileType.Lua:
files = Directory.Exists(modify_path)?Directory.GetFiles(modify_path, "*.lua", SearchOption.AllDirectories):files;
break;
default:
files = Directory.Exists(txt_path)?Directory.GetFiles(txt_path, "*.txt", SearchOption.AllDirectories):files;
break;
}
EditorApplication.update = delegate ()
{
string filePath = "";
double allLen = filesCsv.Length + filesPrefab.Length + filesLua.Length + files.Length + filesTxt.Length;
/*------------------------------*/
if (fileType == FileType.All){
if (startIndex <= filesTxt.Length - 1){
filePath = filesTxt.Length>0?GetRelativeAssetsPath(FileType.Txt, filesTxt[startIndex]):"txt路径不存在(@#!%*&)";
}
else if (startIndex <= filesTxt.Length + filesCsv.Length - 1){
filePath = filesCsv.Length>0?GetRelativeAssetsPath(FileType.Csv, filesCsv[startIndex - filesTxt.Length]):"csv路径不存在(@#!%*&)";
}
else if (startIndex <= filesTxt.Length + filesCsv.Length + filesLua.Length - 1){
filePath = filesLua.Length>0?GetRelativeAssetsPath(FileType.Lua, filesLua[startIndex - filesCsv.Length - filesTxt.Length]):"lua路径不存在(@#!%*&)";
}
else{
filePath = filesPrefab.Length>0?GetRelativeAssetsPath(FileType.Prefab, filesPrefab[startIndex - filesCsv.Length - filesLua.Length - filesTxt.Length]):"prefab路径不存在(@#!%*&)";
}
}
else{
filePath = files.Length>0?GetRelativeAssetsPath(fileType, files[startIndex]):"检索路径不存在(@#!%*&)";
}
if (!filePath.Contains("路径不存在(@#!%*&)")) SetArabicSupToLua(opType, filePath);
/*------------------------------*/
Debug.Log("filePath:" + filePath);
bool isCancel = EditorUtility.DisplayCancelableProgressBar(string.Format("资源处理中({0}/{1})", startIndex, allLen), filePath, (float)startIndex / (float)allLen);
startIndex++;
if (isCancel || startIndex >= allLen)
{
AssetDatabase.Refresh();
AssetDatabase.SaveAssets();
EditorUtility.ClearProgressBar();
EditorApplication.update = null;
startIndex = 0;
Debug.Log("处理完成");
}
};
}
static private string GetRelativeAssetsPath(FileType fileType, string path)
{
if (fileType == FileType.Prefab){
// 预制体路径比较特别!!!
return "Assets" + Path.GetFullPath(path).Replace(Path.GetFullPath(Application.dataPath), "").Replace('\\', '/');
}
else {
return Path.GetFullPath(path).Replace(Path.GetFullPath(Application.dataPath), "").Replace('\\', '/');
}
}
static string SetArabicWord(string data)
{
string a = replaceWord_last;
string b = replaceWord_new;
data = data.Replace(a, b);
return data;
}
static string SetSwitchToSpecialWord(string data)
{
data = data.Replace(",", "(6.4.8.4)");
data = data.Replace("。", "(1.2.3.4)");
data = data.Replace("!", "(4.3.2.1)");
data = data.Replace("(", "(9.4.5.4)");
data = data.Replace(")", "(6.4.2.4)");
return data;
}
static string SetSwitchToBackWord(string data)
{
data = data.Replace("(6.4.8.4)", ",");
data = data.Replace("(1.2.3.4)", "。");
data = data.Replace("(4.3.2.1)", "!");
data = data.Replace("(9.4.5.4)", "(");
data = data.Replace("(6.4.2.4)", ")");
return data;
}
static void SetArabicSupToLua(OpType opType ,string path)
{
string saveStr;
using (StreamReader reader = new StreamReader(path))
{
string data = reader.ReadToEnd();
switch (opType)
{
case OpType.SwitchToBack:
saveStr = SetSwitchToBackWord(data);
break;
case OpType.SwitchToSpecial:
saveStr = SetSwitchToSpecialWord(data);
break;
default:
saveStr = SetArabicWord(data);
break;
}
}
using (StreamWriter sw = new StreamWriter(path))
{
sw.Write(saveStr);
}
}
}