Unity编辑器下,界面替换NGUI字体以及字号

项目中有需要批量替换字体以及字号的需求,一般也就是多语言处理吧。

提供界面如下:

手机拍图,就这样凑合看吧。但是代码不打折。

紧急避让,我只提供修改UILabel以及UIPopupList 下的字体,字号。其他需求的,可以绕远了。还有哈,代码写的很渣渣,因为自己用嘛。还有所有权归我本人所有,一切用于商业用途的,请自己联系博主,上缴费用,谢谢~~~~(赚钱好方法)

using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;

//
public class ReplaceFontEditor
{
    [MenuItem("XmlTest/打开替换字体窗口", false, 10)]
    static void OpenReplaceFontEditor()
    {
        UIReplaceFontEditorWindow.Init();
    }
}
  1 using UnityEngine;
  2 using UnityEditor;
  3 using System.Collections;
  4 using System.Collections.Generic;
  5 using System;
  6 using System.IO;
  7 using System.Text;
  8 using LuaInterface;
  9
 10 public class FontInfo
 11 {
 12
 13 }
 14
 15 public class UIReplaceFontEditorWindow : EditorWindow
 16 {
 17     private static UIReplaceFontEditorWindow window;
 18
 19     private static Dictionary<string, Font> allFonts = new Dictionary<string, Font>();  // key: fontName, value : Font
 20     private static Dictionary<string, HashSet<int>> allFontsSize = new Dictionary<string, HashSet<int>>(); // key: fontName, value :Hash<int>, Hash<int> 保存所有的字号(去重)
 21     private static Dictionary<string, Dictionary<int, HashSet<string>>> allFontNameSizePrefabName = new Dictionary<string, Dictionary<int, HashSet<string>>>();  // key : fontName, value: < key:fontSize, value: prefabNames >
 22
 23     private static List<GameObject> allNeedReplacePrefab = new List<GameObject>();
 24     private static string[] allFontName = new string[8];  // 预先分配
 25     private static string writefileinfo = "字体名称、字号文件(fontsizeinfo.txt)写入状态:空闲状态 ";
 26     // prefab文字信息保存目录
 27     private static string prefabFontSizeInfoSaveDir = "dir name";
 28     private int ID = -1;
 29     // 待替换字体
 30     public Font previousFont = null;
 31     private string previourFontSelectInfo = "";
 32     // 新字体
 33     public Font newFont = null;
 34     private string newFontSelectInfo = "";
 35     // 字体对应文件
 36     public string fontSizeFilePath = "file name";
 37     private string fontSizeFilePathSelectInfo = "";
 38     // 保存字号对应文件
 39     private ArrayList fontSizeArray = new ArrayList();
 40     // 新prefab保存目录
 41     public string newPrefabSaveDir = "dir name";
 42
 43     private string objpath_test = "";
 44
 45     public static void Init()
 46     {
 47         // Get existing open window or if none, make a new one:
 48         window = (UIReplaceFontEditorWindow)EditorWindow.GetWindow<UIReplaceFontEditorWindow>("替换字体窗口",true);
 49
 50         StaticInitData();
 51     }
 52
 53     static void StaticInitData()
 54     {
 55         allFonts.Clear();
 56         foreach (var item in allFontsSize)
 57         {
 58             item.Value.Clear();
 59         }
 60         allFontsSize.Clear();
 61         allNeedReplacePrefab.Clear();
 62         for (int i = 0; i < allFontName.Length; i++ )
 63         {
 64             allFontName[i] = "";
 65         }
 66         writefileinfo = "字体名称、字号文件(fontsizeinfo.txt)写入状态:空闲状态";
 67         prefabFontSizeInfoSaveDir = "dir name";
 68
 69
 70     }
 71
 72     void InitData()
 73     {
 74         ID = -1;
 75         // 待替换字体
 76         previousFont = null;
 77         previourFontSelectInfo = "";
 78         // 新字体
 79         newFont = null;
 80         newFontSelectInfo = "";
 81         // 字体对应文件
 82         fontSizeFilePath = "file name";
 83         fontSizeFilePathSelectInfo = "";
 84         // 保存字号对应文件
 85         fontSizeArray.Clear();
 86         // 新prefab保存目录
 87         newPrefabSaveDir = "dir name";
 88
 89         objpath_test = "";
 90     }
 91     static void FontInit()
 92     {
 93         // 查找选中的prefab内的所有字体,以及字体所设置的所有字号
 94
 95         UnityEngine.Object[] selectObjs = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.DeepAssets);
 96
 97         foreach (UnityEngine.Object selectObj in selectObjs)
 98         {
 99             GameObject obj = null;
100             try
101             {
102                 obj = (GameObject)selectObj;
103             }
104             catch
105             {
106                 continue;
107             }
108
109             if (obj == null || selectObj == null)
110             {
111                 Debug.LogWarning("ERROR:Obj Is Null !!!");
112                 continue;
113             }
114             string objPath = AssetDatabase.GetAssetPath(selectObj);
115
116             if (objPath.Length < 1 || objPath.EndsWith(".prefab") == false)
117             {
118                 Debug.LogWarning("ERROR:Folder=" + objPath);
119             }
120             else
121             {
122                 string prePath = objPath.Substring(7, objPath.Length - 7).Replace("\\", "/").ToLower();
123
124                 allNeedReplacePrefab.Add(obj);
125                 Debug.Log("Selected Folder=" + objPath);
126
127                 // 直接修改prefab
128                 UILabel[] labels = obj.GetComponentsInChildren<UILabel>(true);
129
130                 foreach (UILabel label in labels)
131                 {
132                     // 保存字体 以及字号
133
134                     if ( label.trueTypeFont == null )
135                     {
136                         Debug.Log("font is null" + prePath);
137                     }
138                     else
139                     {
140                         if (!allFonts.ContainsKey(label.trueTypeFont.name))
141                         {
142                             allFonts.Add(label.trueTypeFont.name, label.trueTypeFont);
143                         }
144                         if (allFontsSize.ContainsKey(label.trueTypeFont.name))
145                         {
146                             allFontsSize[label.trueTypeFont.name].Add(label.fontSize);
147                         }
148                         else
149                         {
150                             allFontsSize.Add(label.trueTypeFont.name, new HashSet<int>());
151                             allFontsSize[label.trueTypeFont.name].Add(label.fontSize);
152                         }
153
154                         if ( allFontNameSizePrefabName.ContainsKey( label.trueTypeFont.name))
155                         {
156                             if ( allFontNameSizePrefabName[label.trueTypeFont.name].ContainsKey(label.fontSize))
157                             {
158                                 allFontNameSizePrefabName[label.trueTypeFont.name][label.fontSize].Add(objPath);
159                             }
160                             else
161                             {
162                                 allFontNameSizePrefabName[label.trueTypeFont.name].Add(label.fontSize, new HashSet<string>());
163                                 allFontNameSizePrefabName[label.trueTypeFont.name][label.fontSize].Add(objPath);
164                             }
165                         }
166                         else
167                         {
168                             allFontNameSizePrefabName.Add(label.trueTypeFont.name, new Dictionary<int, HashSet<string> >());
169                             allFontNameSizePrefabName[label.trueTypeFont.name].Add(label.fontSize, new HashSet<string>());
170                             allFontNameSizePrefabName[label.trueTypeFont.name][label.fontSize].Add(objPath);
171                         }
172                     }
173                 }
174                 UIPopupList[] poplists = obj.GetComponentsInChildren<UIPopupList>(true);
175                 foreach (UIPopupList popListItem in poplists)
176                 {
177                     // 保存字体 以及字号
178                     if (popListItem.trueTypeFont == null)
179                     {
180                         Debug.Log("font is null" + prePath);
181                     }
182                     else
183                     {
184                         if (!allFonts.ContainsKey(popListItem.trueTypeFont.name))
185                         {
186                             allFonts.Add(popListItem.trueTypeFont.name, popListItem.trueTypeFont);
187                         }
188                         if (allFontsSize.ContainsKey(popListItem.trueTypeFont.name))
189                         {
190                             allFontsSize[popListItem.trueTypeFont.name].Add(popListItem.fontSize);
191                         }
192                         else
193                         {
194                             allFontsSize.Add(popListItem.trueTypeFont.name, new HashSet<int>());
195                             allFontsSize[popListItem.trueTypeFont.name].Add(popListItem.fontSize);
196                         }
197                     }
198                 }
199             }
200         }
201         int i = 0;
202         foreach ( KeyValuePair<string,Font> kv in allFonts)
203         {
204             allFontName[i] = kv.Key;
205             i++;
206         }
207
208         if (prefabFontSizeInfoSaveDir.Equals("") || prefabFontSizeInfoSaveDir.Equals("dir name"))
209         {
210             Debug.LogWarning("未选择目录,不保存文字信息");
211             writefileinfo = "未选择文件保存目录,因此不保存字号信息 ";
212         }
213         else
214         {
215             writefileinfo = "字体名称、字号文件(fontsizeinfo.txt)写入状态:正在写入";
216             writefileinfo = WriteFontSizeInfoToFile(prefabFontSizeInfoSaveDir);
217         }
218
219     }
220
221     static string WriteFontSizeInfoToFile(string path)
222     {
223
224         FileStream fs = new FileStream( prefabFontSizeInfoSaveDir + "/fontsizeinfo.txt", FileMode.Create);
225         StreamWriter sw = new StreamWriter(fs);
226         List<int> fontSizeList = new List<int>();
227         sw.WriteLine("字体信息如下,格式为:【 字体名称:所有字号 】 ");
228         // 输出信息
229         foreach (var item in allFontsSize)
230         {
231             sw.Write(item.Key + ":");
232             fontSizeList.Clear();
233
234             foreach (var fontsize in item.Value)
235             {
236                 fontSizeList.Add(fontsize);
237                 //sw.Write(fontsize + " ");
238             }
239             fontSizeList.Sort();
240
241             foreach (var fontsizeInList in fontSizeList)
242             {
243                 sw.Write(fontsizeInList + ",");
244             }
245             sw.WriteLine();
246         }
247         foreach (KeyValuePair<string, Dictionary<int,HashSet<string> > > allItemInfo in allFontNameSizePrefabName)
248         {
249             sw.WriteLine();
250             sw.Write("字体名称(fontName) :" + allItemInfo.Key +"," + "所有字号个数(allFontSizeCount):" + allItemInfo.Value.Count);
251             sw.WriteLine();
252
253             List<KeyValuePair<int,HashSet<string> > > lst = new List<KeyValuePair<int,HashSet<string>>>(allItemInfo.Value);
254             lst.Sort(delegate(KeyValuePair<int, HashSet<string>> s1, KeyValuePair<int, HashSet<string>> s2)
255             {
256                 return s1.Key.CompareTo(s2.Key);
257             });
258
259             foreach (var fontSizeAndPrefabName in lst)
260             {
261                 sw.WriteLine();
262                 sw.WriteLine("--字号(fontSize) : " + fontSizeAndPrefabName.Key + " : ");
263                 foreach (var prefabName in fontSizeAndPrefabName.Value)
264                 {
265                     sw.WriteLine("    " + prefabName + ";");
266                 }
267             }
268         }
269
270         sw.Flush();
271         sw.Close();
272         fs.Close();
273         return "字体名称、字号文件(fontsizeinfo.txt)写入状态:保存成功";
274     }
275
276     /// <summary> 保存.</summary>
277     void OnSelectNewFont(UnityEngine.Object obj)
278     {
279         newFont = obj as Font;
280         //NGUISettings.ambigiousFont = obj;
281         Repaint();
282     }
283
284     void OnSelectPreviousFont(UnityEngine.Object obj)
285     {
286         previousFont = obj as Font;
287         //NGUISettings.ambigiousFont = obj;
288         Repaint();
289     }
290     void OnSelectAtlas(UnityEngine.Object obj)
291     {
292         NGUISettings.atlas = obj as UIAtlas;
293         Repaint();
294     }
295     /// <summary> 刷新窗口. </summary>
296     void OnSelectionChange() { Repaint(); }
297
298     public static bool IsSetNullFont;
299
300     /// <summary>UI绘制区域.</summary>
301     void OnGUI()
302     {
303         try
304         {
305             int startWidth = 10;
306             int startHeight =16;
307             EditorGUIUtility.labelWidth = 100f;
308
309
310             int _LineStartWidth = startWidth;
311             int _LineStartHeight = startHeight;
312
313             EditorGUI.LabelField(new Rect(_LineStartWidth, _LineStartHeight, 500, 30), "1、选择Prefab内字体名称、字号信息文件保存目录(文件名默认为fontsizeinfo.txt)", EditorStyles.boldLabel);
314
315             _LineStartWidth = startWidth + 40;
316             _LineStartHeight += 30;
317             newPrefabSaveDir = EditorGUI.TextArea(new Rect(_LineStartWidth, _LineStartHeight, 300, 20), prefabFontSizeInfoSaveDir, EditorStyles.textField);
318             _LineStartWidth += 310;
319             if (GUI.Button(new Rect(_LineStartWidth, _LineStartHeight, 80, 18), "选择目录"))
320             {
321                 prefabFontSizeInfoSaveDir = EditorUtility.SaveFolderPanel("Save newPrefab to directory", "./", "");
322             }
323             _LineStartWidth = startWidth;
324             _LineStartHeight += 30;
325
326             EditorGUI.LabelField(new Rect(_LineStartWidth, _LineStartHeight, 500, 30), "2、点击按钮获取字体信息(若第1步未选择目录,则不保存文件)", EditorStyles.boldLabel);
327
328             _LineStartWidth = startWidth + 40 ;
329             _LineStartHeight += 30;
330
331             if (GUI.Button(new Rect(_LineStartWidth , _LineStartHeight, 300, 40), "获取所选Prefab内字体信息并将信息写入文件"))
332             {
333                 FontInit();
334             }
335             _LineStartWidth = startWidth + 40;
336             _LineStartHeight += 40;
337             EditorGUI.LabelField(new Rect(_LineStartWidth, _LineStartHeight, 500, 30), writefileinfo, EditorStyles.boldLabel);
338
339             _LineStartWidth = startWidth;
340             _LineStartHeight += 40;
341             EditorGUI.LabelField(new Rect(_LineStartWidth, _LineStartHeight, 150, 30), "3、选择需要替换的字体", EditorStyles.boldLabel);
342
343             _LineStartWidth = startWidth + 40;
344             _LineStartHeight += 30;
345
346             ID = EditorGUI.Popup(new Rect(_LineStartWidth, _LineStartHeight, 105, 15), ID, allFontName);
347             if (ID >= 0)
348             {
349                 previousFont = allFonts[allFontName[ID]];
350             }
351
352             _LineStartWidth += 120;
353             //EditorGUI.TextArea(new Rect(_LineStartWidth, _LineStartHeight, 300, 20), prefabFontSizeInfoSaveDir, EditorStyles.textField);
354             EditorGUI.ObjectField(new Rect(_LineStartWidth, _LineStartHeight, 150, 20), previousFont, typeof(Font), false);
355             _LineStartWidth += 150;
356             EditorGUI.LabelField(new Rect(_LineStartWidth, _LineStartHeight, 150, 30), previourFontSelectInfo, EditorStyles.boldLabel);
357             /***
358             _LineStartWidth = startWidth + 40;
359             _LineStartHeight += 40;
360
361             GUILayout.BeginHorizontal();
362
363             if (GUI.Button(new Rect(_LineStartWidth, _LineStartHeight, 80, 20), "Font       ▽"))
364             {
365                 ComponentSelector.Show<Font>(OnSelectPreviousFont);
366             }
367             _LineStartWidth += 90;
368             previousFont = EditorGUI.ObjectField(new Rect(_LineStartWidth, _LineStartHeight, 200, 20), previousFont, typeof(Font), false) as Font;
369             _LineStartWidth += 210;
370             if (previousFont != null && GUI.Button(new Rect(_LineStartWidth, _LineStartHeight, 20, 20), "X"))
371             {
372                 previousFont = null;
373             }
374             GUILayout.EndHorizontal();
375             **/
376             _LineStartWidth = startWidth;
377             _LineStartHeight += 30;
378             EditorGUI.LabelField(new Rect(startWidth, _LineStartHeight, 300, 30), "4、选择新字体(如不选择新字体,则Prefab内字体将置空)", EditorStyles.boldLabel);
379
380             _LineStartWidth = startWidth;
381             _LineStartHeight += 20;
382             GUILayout.BeginHorizontal();
383             _LineStartWidth = startWidth + 40;
384             if (GUI.Button(new Rect(_LineStartWidth, _LineStartHeight, 80, 20), "Font       ▽"))
385             {
386                 ComponentSelector.Show<Font>(OnSelectNewFont);
387             }
388             _LineStartWidth += 90;
389             newFont = EditorGUI.ObjectField(new Rect(_LineStartWidth, _LineStartHeight, 200, 20), newFont, typeof(Font), false) as Font;
390             _LineStartWidth += 210;
391             if (newFont != null && GUI.Button(new Rect(_LineStartWidth, _LineStartHeight, 20, 20), "X"))
392             {
393                 newFont = null;
394             }
395             _LineStartWidth += 30;
396             EditorGUI.LabelField(new Rect(_LineStartWidth, _LineStartHeight, 150, 30), newFontSelectInfo, EditorStyles.boldLabel);
397             GUILayout.EndHorizontal();
398
399             _LineStartWidth = startWidth;
400             _LineStartHeight += 30;
401             EditorGUI.LabelField(new Rect(_LineStartWidth, _LineStartHeight, 300, 30), "5、选择字号对应文件(不选择文件,则字号不变)", EditorStyles.boldLabel);
402
403             _LineStartWidth = startWidth + 40;
404             _LineStartHeight += 20;
405             //Rect textRect = new Rect(_LineStartWidth, _LineStartHeight, 300, 150);
406             fontSizeFilePath = EditorGUI.TextArea(new Rect(_LineStartWidth, _LineStartHeight, 300, 20), fontSizeFilePath, EditorStyles.textField);
407             _LineStartWidth += 310;
408
409             if (GUI.Button(new Rect(_LineStartWidth, _LineStartHeight, 80, 18), "打开文件"))
410             {
411                 fontSizeFilePath = EditorUtility.OpenFilePanel("Open file directory", "./", "txt");
412             }
413             _LineStartWidth = startWidth + 40;
414             _LineStartHeight += 20;
415             EditorGUI.LabelField(new Rect(_LineStartWidth, _LineStartHeight, 150, 30), fontSizeFilePathSelectInfo, EditorStyles.boldLabel);
416
417             _LineStartWidth = startWidth + 40;
418             _LineStartHeight += 15;
419             EditorGUI.LabelField(new Rect(_LineStartWidth, _LineStartHeight, 300, 20), "字号对应文件格式为:序号,老字号,新字号", EditorStyles.boldLabel);
420
421             _LineStartWidth = startWidth + 40;
422             _LineStartHeight += 20;
423             EditorGUI.LabelField(new Rect(_LineStartWidth, _LineStartHeight, 150, 20), "示例:", EditorStyles.boldLabel);
424             _LineStartWidth += 30;
425             EditorGUI.LabelField(new Rect(_LineStartWidth, _LineStartHeight, 150, 20), "1,20,30", EditorStyles.boldLabel);
426             _LineStartWidth = startWidth + 70;
427             _LineStartHeight += 20;
428             EditorGUI.LabelField(new Rect(_LineStartWidth, _LineStartHeight, 150, 20), "2,25,40", EditorStyles.boldLabel);
429
430             _LineStartWidth = startWidth + 70;
431             _LineStartHeight += 20;
432             EditorGUI.LabelField(new Rect(_LineStartWidth, _LineStartHeight, 150, 20), "3,18,28", EditorStyles.boldLabel);
433
434             //_LineStartWidth = startWidth;
435             //_LineStartHeight += 30;
436
437             //EditorGUI.LabelField(new Rect(_LineStartWidth, _LineStartHeight, 150, 150), "选择新Prefab保存目录", EditorStyles.boldLabel);
438
439             //_LineStartWidth = startWidth;
440             //_LineStartHeight += 20;
441             //newPrefabSaveDir = EditorGUI.TextArea(new Rect(_LineStartWidth, _LineStartHeight, 300, 20), newPrefabSaveDir, EditorStyles.textField);
442             //_LineStartWidth += 310;
443             //if (GUI.Button(new Rect(_LineStartWidth, _LineStartHeight, 80, 18), "选择目录"))
444             //{
445             //    newPrefabSaveDir = EditorUtility.SaveFolderPanel("Save newPrefab to directory", "./", "");
446             //}
447
448             _LineStartWidth = startWidth;
449             _LineStartHeight += 30;
450             EditorGUI.LabelField(new Rect(startWidth, _LineStartHeight, 150, 30), "6、点击按钮替换文字信息", EditorStyles.boldLabel);
451
452             _LineStartWidth = startWidth + 40;
453             _LineStartHeight += 30;
454
455             if (GUI.Button( new Rect(_LineStartWidth , _LineStartHeight,300, 36),"开始替换"))
456             {
457                 ReplaceFontAndFontSize();
458             }
459         }
460         catch (System.Exception ex)
461         {
462             Debug.LogError(ex.Message + objpath_test);
463             previousFont = null;
464             newFont = null;
465             fontSizeFilePath = "file name";
466
467         }
468     }
469
470     private void ReplaceFontAndFontSize()
471     {
472         if (previousFont == null)
473         {
474             previourFontSelectInfo = "未选择需要替换的字体,请选择...";
475             Debug.LogError(previourFontSelectInfo);
476             return;
477         }
478
479         if (newFont == null)
480         {
481             newFontSelectInfo = "未选择新字体,字体将置空";
482             Debug.LogWarning(newFontSelectInfo);
483         }
484
485         if (fontSizeFilePath.Equals("") || fontSizeFilePath.Equals("file name"))
486         {
487             fontSizeFilePathSelectInfo = "你没有选择对应字号文件,将不替换字号 ";
488             Debug.LogWarning(fontSizeFilePathSelectInfo);
489             CorrectionPublicFont( newFont, previousFont, false);
490         }
491         else
492         {
493             //读取文件内容
494             StreamReader sr = new StreamReader(fontSizeFilePath, Encoding.Default);
495
496             string strLine = null;
497             fontSizeArray.Clear();
498             while ((strLine = sr.ReadLine()) != null)
499             {
500                 if (!string.IsNullOrEmpty(strLine))
501                 {
502                     string[] newArray = strLine.Split(‘,‘);
503                     fontSizeArray.Add(newArray);
504                 }
505
506             }
507             sr.Close();
508             // 具体替换
509             CorrectionPublicFont(newFont, previousFont, true);
510         }
511         StaticInitData();
512         InitData();
513     }
514
515     private void CorrectionPublicFont(Font replace, Font matching, bool isReplaceFontSize)
516     {
517         foreach (GameObject obj in allNeedReplacePrefab)
518         {
519             // 直接修改prefab
520             UILabel[] labels = obj.GetComponentsInChildren<UILabel>(true);
521             int newFontSize = 0;
522             foreach (UILabel label in labels)
523             {
524                 if (label.trueTypeFont == matching)
525                 {
526                     label.trueTypeFont = replace;
527                     newFontSize = GetNewFontSizeByOldSize(label.fontSize);
528                     label.fontSize = newFontSize;
529                 }
530             }
531             UIPopupList[] poplists = obj.GetComponentsInChildren<UIPopupList>(true);
532             foreach (UIPopupList popListItem in poplists)
533             {
534                 if (popListItem.trueTypeFont == matching)
535                 {
536                     //    NGUISettings.ambigiousFont = replace;
537                     popListItem.trueTypeFont = replace;
538                     newFontSize = GetNewFontSizeByOldSize(popListItem.fontSize);
539                     popListItem.fontSize = newFontSize;
540                 }
541             }
542             EditorUtility.SetDirty(obj);
543             /**** 创建新prefab 失败  ******/
544             /****
545             GameObject clone = GameObject.Instantiate(obj) as GameObject;
546             UILabel[] labels = clone.GetComponentsInChildren<UILabel>(true);
547             int newFontSize = 0;
548             foreach (UILabel label in labels)
549             {
550                 if (label.trueTypeFont == matching)
551                 {
552                     label.trueTypeFont = replace;
553                     newFontSize = GetNewFontSizeByOldSize(label.fontSize);
554                     label.fontSize = newFontSize;
555                 }
556             }
557             UIPopupList[] poplists = clone.GetComponentsInChildren<UIPopupList>(true);
558             foreach (UIPopupList popListItem in poplists)
559             {
560                 if (popListItem.trueTypeFont == matching)
561                 {
562                     //    NGUISettings.ambigiousFont = replace;
563                     popListItem.trueTypeFont = replace;
564                     newFontSize = GetNewFontSizeByOldSize(popListItem.fontSize);
565                     popListItem.fontSize = newFontSize;
566                 }
567             }
568             SaveDealFinishPrefab(clone, path);
569             GameObject.DestroyImmediate(clone);
570              ******/
571             Debug.Log("Connect Font Success=" + obj.name);
572
573         }
574         EditorApplication.SaveAssets();
575         AssetDatabase.SaveAssets();
576         AssetDatabase.Refresh();
577     }
578     private int GetNewFontSizeByOldSize(int fontSize)
579     {
580         int newFontSize = fontSize;
581         if (fontSizeArray.Count > 0 )
582         {
583             int nRow = fontSizeArray.Count;
584             int nCol = ((string[])fontSizeArray[0]).Length;
585             for ( int i = 0; i < nRow; i++ )
586             {
587                 string[] data = (string[])fontSizeArray[i];
588                 for (int j = 0; j < nCol;j++ )
589                 {
590                     if (fontSize == int.Parse(data[1]))
591                     {
592                         newFontSize = int.Parse(data[2]);
593                         return newFontSize;
594                     }
595                 }
596
597             }
598         }
599         return newFontSize;
600     }
601     //private void SaveDealFinishPrefab(GameObject go, string path)
602     //{
603     //    if (File.Exists(path) == true)
604     //    {
605     //        UnityEngine.Object prefab = AssetDatabase.LoadAssetAtPath(path, typeof(GameObject));
606     //        PrefabUtility.ReplacePrefab(go, prefab);
607     //    }
608     //    else
609     //    {
610     //        PrefabUtility.CreatePrefab(path, go);
611     //    }
612     //}
613 }

直接复制到代码内,然后放在Editor下,就可以用辣

至于步骤,在界面上说的也很清楚了。不明白的,怪自己智商咯。

时间: 2024-10-24 09:10:25

Unity编辑器下,界面替换NGUI字体以及字号的相关文章

Unity 编辑器下控制粒子播放跟随位移

在之前的文章<Unity 编辑器下控制播放粒子>讲到在Unity编辑器的Scene视图进行控制播放粒子ParticleSystem,但是当这个粒子是挂载在人物身体部位的时候,会有可能出现不跟随位移的情况.查找原因,发现是 Resimulate 被勾选中了,这个选项是指当粒子参数改变时,立即更新粒子效果.要让粒子也能跟随移动,必须将这个选项取消掉. 可以简单的在编辑器下,取消掉这个选项,如下: 但是,对于其他人员可能不知道这个原因,手动设置不够智能,需要进一步在代码中主动控制.操纵这个选项,需要

Unity 编辑器下控制播放粒子

在Unity编辑器的Scene视图进行控制播放粒子ParticleSystem,可以借助方法Simulate,具体可以参照以下例子: 创建一个空对象ParticleAll,在这个对象下添加一个粒子(要添加多个粒子的话,添加到这个粒子之下),此时选中粒子,可以看到Scene视图预览播放粒子效果.附上新脚本EditParticleSystem,此为空脚本,如下: C# Code 1 2 3 4 5 6 using UnityEngine; public class EditParticleSyste

Unity 编辑器下控制播放Animator

在Unity编辑器的Scene视图进行控制播放Animator,可以借助方法StartPlayback.StopPlayback.StartRecording和StopRecording,具体可以参照以下例子: 创建一个带Controller的Animator对象,可以看到此时人物呈现T型姿势.附上新脚本EditAnimator,此为空脚本,如下: C# Code 1 2 3 4 5 6 using UnityEngine; public class EditAnimator : MonoBeh

Unity 编辑器的 界面布局 保存方法

在软件界面的右上角(关闭按钮的下方),点击  layout  (界面)的下拉箭头. 弹出选项中的 save layout....(保存界面选项),输入命名,就可以生成这个界面的布局.  (软件本身也有很多自带的界面布局可以使用) 保存在了路径 C:\Users\MH\AppData\Roaming\Unity\Editor-5.x\Preferences\Layouts 其中MH 是计算机名,请根据自己的计算机情况更改

Linux下 批量替换文件内容方法和odoo替换谷歌字体

#odoo#用中科院CDN解决odoo用到google字体速度慢问ti Linux下批量替换文件内容方法 http://www.cnblogs.com/fjping0606/p/4428850.html 1:查找find . -type f -name "*.html"|xargs grep 'yourstring' 2:查找并替换find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g' perl -pi -e在Per

关于Unity中的NGUI字体

NGUI字体类型 1: UIFont字体,UIFont类实现的2: TTF动态字体的使用3: BBCode的特殊字体的使用4: NGUI字体制作;5: BMFont字体制作和艺术字体的制作;6: UILabel的使用 NGUI---->open---->Font Maker,字体文件的制作工具 Generated Bitmap:产生位图,或者叫艺术字,基于图片的文字 Imported Bitmap:导入位图,针对于用UIFont,或者是showBox(一些制作艺术字的工具) Dynamic:动

[Unity3D]事半功倍:界面插件NGUI的使用教程与实例

[Unity3D]事半功倍:界面插件NGUI的使用教程与实例 原文地址:http://www.tasharen.com/?page_id=185 NGUI下载地址:点我传送 NGUI教程:步骤1-Scene 1.创建一个新的场景(New Scene).2.选择并删除场景里的MainCamera.3.在NGUI菜单下选择Create a New UI,会打开UI创建向导. 4.在创建向导中你能更改UI的基本参数.现在我们选Default layer,点击Create Your UI 按钮.5.就这

unity 编辑器和插件制作(四.2)

上次 我们讲述的是编辑器制作,怎么把图片加载到场景中,今天 我们就来讲述下,怎么 制作UIButton以及UIimage的互换. 废话不多说.进入正题. 首先我们要了解 unity的机制,button属性必须有的属性等. 首先 我们先说下 unity的机制: unity中检测点击事件,使用NGUI的可能知道,NGUI使用的就是SendMessage的方式来进行事件的传递.没错,这也是 unity最为简便的方式, (要注意一个问题哦,这个方式 如果 你要使用 大于 万次循环的话 会有延迟的哦,一般

unity编辑器和插件的制作(四.1)

好久没有更新,有些急事终于处理完了,接着更新博客! 废话不多说,接着上面的讲,今天我们来接着讲述. 前面说到 怎么去建立一个自己 ,用代码绘制一个色块,今天我们来讲述下,怎么绘制一个图片在场景里面. 首先 我们先做下图片的功课. 在unity中图片的种类分了很多,默认是:Texture, 还有其他的一些属性. 有些人可以会遇到 我放进去的素材为什么编译之后会变模糊那,这是由于,在unity中你没有修改图片的属性,导致的. 在 texture模式下, 我们来分析下这种图片的属性, wrap mod