ChangeScriptEncodingFormat.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using UnityEngine;
  2. using UnityEditor;
  3. using System.IO;
  4. using System.Text;
  5. public class ChangeScriptEncodingFormat
  6. {
  7. // 添加一个右键菜单。
  8. // % 按下ctrl时显示菜单。(Windows: control, macOS: command)
  9. // & 按下alt时显示菜单。(Windows/Linux: alt, macOS: option)
  10. // _ 按下shift时显示菜单。(Windows/Linux/macOS: shift)
  11. [MenuItem("Assets/脚本改格式:GB2312->UTF8无BOM %g", false, 100)]
  12. private static void CustomMenu()
  13. {
  14. // 例如: 获取Project视图中选定的对象
  15. Object selectedObject = Selection.activeObject;
  16. if (selectedObject != null)
  17. {
  18. // 获取选定对象的相对路径
  19. string relativeAssetPath = AssetDatabase.GetAssetPath(selectedObject);
  20. // 获取项目根目录路径
  21. string projectPath = Path.GetDirectoryName(Application.dataPath);
  22. // 获取选定对象的绝对路径
  23. string absoluteAssetPath = Path.Combine(projectPath, relativeAssetPath);
  24. // 获取选定对象的文件名(包括后缀)
  25. string fileName = Path.GetFileName(relativeAssetPath);
  26. Debug.Log("执行自定义操作: " + selectedObject.name +
  27. ", 相对路径: " + relativeAssetPath +
  28. ", 绝对路径: " + absoluteAssetPath +
  29. ", 文件名: " + fileName);
  30. //判断是否是CSharp文件
  31. if (IsCSharpFile(fileName))
  32. {
  33. Debug.Log("这是一个csharp文件");
  34. ChangeFormat(absoluteAssetPath);
  35. }
  36. else
  37. {
  38. Debug.Log("兄弟,这不是一个csharp文件啊~~~~~~~~~~~");
  39. }
  40. }
  41. else
  42. {
  43. Debug.LogWarning("没有选中任何对象.");
  44. }
  45. }
  46. // 如果项目视图中有选中的对象,则启用右键菜单项
  47. [MenuItem("Assets/脚本改格式:GB2312->UTF8无BOM %g", true)]
  48. private static bool ValidateCustomMenu()
  49. {
  50. return Selection.activeObject != null;
  51. }
  52. /// <summary>
  53. /// 判断该文件是否是CSharp文件
  54. /// </summary>
  55. /// <param name="fileName"></param>
  56. /// <returns></returns>
  57. private static bool IsCSharpFile(string fileName)
  58. {
  59. // 获取文件扩展名(包括点)
  60. string fileExtension = Path.GetExtension(fileName);
  61. // 将扩展名转换为小写并与 ".cs" 进行比较
  62. if (fileExtension.ToLower() == ".cs")
  63. {
  64. return true;
  65. }
  66. return false;
  67. }
  68. /// <summary>
  69. /// 文件格式转码:GB2312转成UTF8
  70. /// 读取指定的文件,转换成UTF8(无BOM标记)格式后,回写覆盖原文件
  71. /// </summary>
  72. /// <param name="sourceFilePath">文件路径</param>
  73. public static void ChangeFormat(string sourceFilePath)
  74. {
  75. string fileContent = File.ReadAllText(sourceFilePath, Encoding.GetEncoding("GB2312"));
  76. File.WriteAllText(sourceFilePath, fileContent, Encoding.UTF8);
  77. Debug.Log("处理结束!");
  78. }
  79. }