Unity3D编辑器扩展Unity3D中实现Text的字体的替换
Posted 恬静的小魔龙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D编辑器扩展Unity3D中实现Text的字体的替换相关的知识,希望对你有一定的参考价值。
推荐阅读
大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
一、前言
在开发中会遇到要将场景中的Text的字体全部替换的情况。
所以就做了一个小工具,可以快速替换Text的字体,主要有一下几个功能:
- 替换
Hierarchy视图
中所有Text的字体
- 替换
Hierarchy视图
中Text指定的字体
- 替换
Project视图
中所有预制体中所有Text的字体
- 替换
Project视图
中所有预制体中Text指定的字体
效果图:
二、正文
因为是要在Unity3D中编辑器扩展开发,所以代码脚本需要放到Editor文件夹中。
我们首先在Assets目录下,新建Scripts文件夹,在Scripts文件夹下新建Editor文件夹、
在Editor文件夹中新建脚本,命名为ReplaceTheFont.cs:
双击打开脚本修改代码:
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
using UnityEngine.UI;
public class ReplaceTheFont : EditorWindow
private static ReplaceTheFont window = null;
private static List<string> prefafbPathList = new List<string>();
private static Font targetFont;
private static Font curFont;
[MenuItem("Tools/字体工具")]
public static void ShowWindow()
if (window == null)
window = GetWindow(typeof(ReplaceTheFont)) as ReplaceTheFont;
window.titleContent = new GUIContent("字体工具");
window.Show();
void OnGUI()
targetFont = (Font)EditorGUILayout.ObjectField("替换字体:", targetFont, typeof(Font), true);
curFont = (Font)EditorGUILayout.ObjectField("被替换字体(不指定全部替换)", curFont, typeof(Font), true);
if (GUILayout.Button("替换场景中Text的字体"))
//寻找Hierarchy面板下所有的Text
var tArray = Resources.FindObjectsOfTypeAll(typeof(Text));
for (int i = 0; i < tArray.Length; i++)
Text t = tArray[i] as Text;
//记录对象
Undo.RecordObject(t, t.gameObject.name);
if (curFont != null)
if (t.font.name == curFont.name)
t.font = targetFont;
else
t.font = targetFont;
//设置已改变
EditorUtility.SetDirty(t);
Debug.Log("完成");
if (GUILayout.Button("替换预制体中Text的字体"))
GetFiles(new DirectoryInfo(Application.dataPath), "*.prefab", ref prefafbPathList);
for (int i = 0; i < prefafbPathList.Count; i++)
GameObject gameObj = AssetDatabase.LoadAssetAtPath<GameObject>(prefafbPathList[i]);
Text[] t = gameObj.GetComponentsInChildren<Text>();
if (t != null)
foreach (Object item in t)
Text text = (Text)item;
//记录对象
Undo.RecordObject(text, text.gameObject.name);
if (curFont != null)
if (text.font.name == curFont.name)
text.font = targetFont;
else
text.font = targetFont;
//设置已改变
EditorUtility.SetDirty(item);
AssetDatabase.SaveAssets();
Debug.Log("完成");
/// <summary>
/// 获得Asset目录下所有预制体对象
/// </summary>
/// <param name="directory"></param>
/// <param name="pattern"></param>
/// <param name="fileList"></param>
public static void GetFiles(DirectoryInfo directory, string pattern, ref List<string> fileList)
if (directory != null && directory.Exists && !string.IsNullOrEmpty(pattern))
try
foreach (FileInfo info in directory.GetFiles(pattern))
string path = info.FullName.ToString();
fileList.Add(path.Substring(path.IndexOf("Assets")));
catch (System.Exception)
throw;
foreach (DirectoryInfo info in directory.GetDirectories())
GetFiles(info, pattern, ref fileList);
打开工具,在编辑栏选择Tools→字体工具
:
三、后记
本篇文章实现了Unity3D编辑器扩展小工具,可以快速的替换Hierarchy视图中Text字体或者Project视图中预制体中Text字体的替换功能。
因为是扩展开发,需要将脚本放到Editor文件夹中,具体为啥放到这个文件夹中就不展开讲了,感兴趣的可以百度。
关于这方面的小工具还有很多,后续会发表更多博文的。
你的点赞就是对博主的支持,有问题记得留言:
博主主页有联系方式。
博主还有跟多宝藏文章等待你的发掘哦:
专栏 | 方向 | 简介 |
---|---|---|
Unity3D开发小游戏 | 小游戏开发教程 | 分享一些使用Unity3D引擎开发的小游戏,分享一些制作小游戏的教程。 |
Unity3D从入门到进阶 | 入门 | 从自学Unity中获取灵感,总结从零开始学习Unity的路线,有C#和Unity的知识。 |
Unity3D之UGUI | UGUI | Unity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。 |
Unity3D之读取数据 | 文件读取 | 使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。 |
Unity3D之数据集合 | 数据集合 | 数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。 |
Unity3D之VR/AR(虚拟仿真)开发 | 虚拟仿真 | 总结博主工作常见的虚拟仿真需求进行案例讲解。 |
Unity3D之插件 | 插件 | 主要分享在Unity开发中用到的一些插件使用方法,插件介绍等 |
Unity3D之日常开发 | 日常记录 | 主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等 |
Unity3D之日常BUG | 日常记录 | 记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。 |
以上是关于Unity3D编辑器扩展Unity3D中实现Text的字体的替换的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D编辑器扩展Unity3D中实现Text的字体的替换
Unity3D编辑器扩展Unity3D中实现UI界面控制,UI界面的显示和隐藏实现
Unity3D中实现按资源名称自动化命名打包AssetBundle