LabelUtility.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Text;
  6. using System.Text.RegularExpressions;
  7. #if UNITY_EDITOR
  8. using UnityEditor;
  9. #endif
  10. using UnityEngine;
  11. public class LabelUtility : MonoBehaviour
  12. {
  13. #region Config
  14. public TextAsset TextAsset;
  15. public List<GameObject> Prefabs;
  16. #endregion
  17. public void CreateLabels()
  18. {
  19. foreach (var Prefab in Prefabs)
  20. {
  21. CreateLabel(TextAsset, Prefab);
  22. }
  23. }
  24. private static string Mark = "//Mark";
  25. private static string Prefix = "public static string ";
  26. public void CreateLabel(TextAsset textAsset, GameObject prefab)
  27. {
  28. StringBuilder stringBuilder = new StringBuilder(textAsset.text);
  29. Transform[] transforms = prefab.GetComponentsInChildren<Transform>(true);
  30. Match match = Regex.Match(stringBuilder.ToString(), Mark);
  31. if (match.Success)
  32. {
  33. stringBuilder.Replace(Mark, "", match.Index, match.Length);
  34. int insertIndex = match.Index + 2;
  35. for (int i = 0; i < transforms.Length; i++)
  36. {
  37. string insertStr = $"\t{Prefix}{transforms[i].name} = \"{transforms[i].name}\";";
  38. stringBuilder.Insert(insertIndex, insertStr);
  39. insertIndex += insertStr.Length;
  40. if (i < transforms.Length - 1)
  41. {
  42. stringBuilder.Insert(insertIndex, "\r\n");
  43. insertIndex += 2;
  44. }
  45. else if (i == transforms.Length - 1)
  46. {
  47. stringBuilder.Insert(insertIndex, $"\r\n\t{Mark}\r\n");
  48. }
  49. }
  50. string path = AssetDatabase.GetAssetPath(textAsset);
  51. File.WriteAllText(path, stringBuilder.ToString());
  52. }
  53. else
  54. {
  55. throw new Exception("没有找到标记");
  56. }
  57. }
  58. }