using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; using System.Text.RegularExpressions; #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; public class LabelUtility : MonoBehaviour { #region Config public TextAsset TextAsset; public List Prefabs; #endregion public void CreateLabels() { foreach (var Prefab in Prefabs) { CreateLabel(TextAsset, Prefab); } } private static string Mark = "//Mark"; private static string Prefix = "public static string "; public void CreateLabel(TextAsset textAsset, GameObject prefab) { StringBuilder stringBuilder = new StringBuilder(textAsset.text); Transform[] transforms = prefab.GetComponentsInChildren(true); Match match = Regex.Match(stringBuilder.ToString(), Mark); if (match.Success) { stringBuilder.Replace(Mark, "", match.Index, match.Length); int insertIndex = match.Index + 2; for (int i = 0; i < transforms.Length; i++) { string insertStr = $"\t{Prefix}{transforms[i].name} = \"{transforms[i].name}\";"; stringBuilder.Insert(insertIndex, insertStr); insertIndex += insertStr.Length; if (i < transforms.Length - 1) { stringBuilder.Insert(insertIndex, "\r\n"); insertIndex += 2; } else if (i == transforms.Length - 1) { stringBuilder.Insert(insertIndex, $"\r\n\t{Mark}\r\n"); } } string path = AssetDatabase.GetAssetPath(textAsset); File.WriteAllText(path, stringBuilder.ToString()); } else { throw new Exception("没有找到标记"); } } }