【Unity3D编辑器扩展】Unity3D中实现Text的字体的替换
创始人
2024-05-06 06:27:44
0

推荐阅读

  • CSDN主页
  • GitHub开源地址
  • Unity3D插件分享
  • 简书地址
  • 我的个人博客

大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新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 prefafbPathList = new List();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面板下所有的Textvar 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(prefafbPathList[i]);Text[] t = gameObj.GetComponentsInChildren();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("完成");}}/// /// 获得Asset目录下所有预制体对象/// /// /// /// public static void GetFiles(DirectoryInfo directory, string pattern, ref List 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之UGUIUGUIUnity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。
Unity3D之读取数据文件读取使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。
Unity3D之数据集合数据集合数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。
Unity3D之VR/AR(虚拟仿真)开发虚拟仿真总结博主工作常见的虚拟仿真需求进行案例讲解。
Unity3D之插件插件主要分享在Unity开发中用到的一些插件使用方法,插件介绍等
Unity3D之日常开发日常记录主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等
Unity3D之日常BUG日常记录记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...