Unity编辑器扩展之Text组件中字体替换工具

想要批量化替换项目预制体资源中Text组件引用的Font字体文件,可以采用以下步骤。
在这里插入图片描述

1、在项目的Editor文件中,新建一个名为FontToolEditor的C#脚本文件,然后把以下代码复制粘贴到新建的FontToolEditor的C#脚本文件中。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.UI;
using System.Globalization;public class FontToolEditor : EditorWindow
{private const string MENU_MAIN_WINDOW = "Tools/Font替换";private List<Font> fontList = new List<Font>() { null };public Font toChange;static Font toChangeFont;public string path = "Assets/";static string path1;public int num = 0;[MenuItem(MENU_MAIN_WINDOW)]public static void Open(){EditorWindow.GetWindow(typeof(FontToolEditor), true);}void OnGUI(){GUILayout.Space(5);GUILayout.Label("选择老字体", GUILayout.Width(100f));num = EditorGUILayout.IntField("字体个数", num);AddMonsScriptList();GUILayout.Space(20);toChange = (Font)EditorGUILayout.ObjectField("选择更换新字体", toChange, typeof(Font), true, GUILayout.MinWidth(100));toChangeFont = toChange;GUILayout.Space(20);GUILayout.Label("路径", GUILayout.Width(50f));GUILayout.BeginHorizontal();{if (GUILayout.Button("浏览")){path = EditorUtility.OpenFolderPanel("窗口标题", Application.streamingAssetsPath, "");int index = path.IndexOf("Assets");path = path.Substring(index, path.Length - index) + "/";}}GUILayout.EndHorizontal();path1 = path;GUILayout.TextField(path);if (GUILayout.Button("确认更换")){Init();}}private void AddMonsScriptList(){int scriptListCount = fontList.Count - 1;for (int i = 0; i < num; i++){if (scriptListCount < i){//给脚本添加一个空值,为了界面好看,也为了下面缓存脚本fontList.Add(null);}fontList[i] = (Font)EditorGUILayout.ObjectField(fontList[i], typeof(Font), true);}}private void Init(){List<GameObject> prefabs = new List<GameObject>();var resourcesPath = path1;var absolutePaths = System.IO.Directory.GetFiles(resourcesPath, "*.prefab", System.IO.SearchOption.AllDirectories);for (int i = 0; i < absolutePaths.Length; i++){EditorUtility.DisplayProgressBar("字体转换中...", "字体转换中...", (float)i / absolutePaths.Length);string path = absolutePaths[i].Replace("\\", "/");GameObject prefab = AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)) as GameObject;//替换fontText[] labels = prefab.GetComponentsInChildren<Text>(true);for (int q = 0; q < labels.Length; q++){if (labels[q].font){for (int w = 0; w < fontList.Count; w++){if (fontList[w].name == labels[q].font.name){int fontSize = labels[q].fontSize;var fonStyle = labels[q].fontStyle;labels[q].font = toChangeFont;labels[q].fontSize = fontSize;labels[q].fontStyle = fonStyle;EditorUtility.SetDirty(labels[q]);}}}}}AssetDatabase.SaveAssets();AssetDatabase.Refresh();EditorUtility.ClearProgressBar();}
}

2、保存FontToolEditor脚本文件中代码,回到Unity中,点击Unity主界面左上角中Tools然后再点击Font替换选项。

在这里插入图片描述

3、选择好老字体,也就是需要被替换掉的字体,再然后需要选择好需要更换的新字体,再然后选择替换路径(也就是这个选择路径下的预支体才会进行字体替换),最后点击确认更换就可以。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习笔记】3_14 正向传播、反向传播和计算图

3.14 正向传播、反向传播和计算图 前面几节里我们使用了小批量随机梯度下降的优化算法来训练模型。在实现中&#xff0c;我们只提供了模型的正向传播&#xff08;forward propagation&#xff09;的计算&#xff0c;即对输入计算模型输出&#xff0c;然后通过autograd模块来调…

哪只基金更值得买入?学会这套BI基金分析逻辑,稳赚不赔

投资基金是一种出色的理财方式&#xff0c;对于初次涉足基金领域的投资者而言&#xff0c;首先需要解决两个关键问题&#xff1a;一是基金是否值得投资&#xff1f;二是如何选择适合自己的基金&#xff1f; 以往盲目跟随成功的基金经理&#xff0c;或者仅仅依赖历史涨跌经验的…

消息中间件之RocketMQ源码分析(十七)

Broker CommitLog索引机制的数据结构 ConsumerQueue消费队列 主要用于消费拉取消息、更新消费位点等所用的索引。源代码参考org.apache.rocketmq.store.ConsumerQueue.该文件内保存了消息的物理位点、消息体大小、消息Tag的Hash值 物理位点:消息在CommitLog中的位点值消息体…

Android 水波纹扩散效果实现

人生只是一种体验&#xff0c;不必用来演绎完美。 效果图 View源码 package com.android.circlescalebar.view;import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.animation.…

算法训练营day36(补),动态规划4

背包最大重量为4。 物品为&#xff1a; 重量价值物品0115物品1320物品2430 问背包能背的物品最大价值是多少&#xff1f; func max(a, b int) int { if a > b { return a } return b } //二维数组解法 func package01(weight, value []int, bagweight int) int { // w…

代码随想录三刷day10

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣1. 两数之和二、力扣454. 四数相加 II三、力扣383. 赎金信 前言 使用map的空间消耗要比数组大一些的&#xff0c;因为map要维护红黑树或者哈希表&…

el-tab-pane标签页如何加图标

效果如下 主要修改 <el-tab-pane name"tab6" v-if"subOrderType 10 && urlname ! wgSalesTerminationOrder"><span slot"label"> 售后判责<span class"el-icon-warning" style"color:#F66B6C;"&…

TensorFlow训练大模型做AI绘图,需要多少的GPU算力支撑

TensorFlow训练大模型做AI绘图&#xff0c;需要多少的GPU算力支撑&#xff01;这个问题就涉及到了资金投资的额度了。众所周知&#xff0c;现在京东里面一个英伟达的显卡&#xff0c;按照RTX3090(24G显存-涡轮风扇&#xff09;版本报价是7000-7500之间。如果你买一张这样的单卡…

unity-unity2d基础操作笔记(一)0.5.0

unity2d基础操作笔记 一、如何查看当前系统的输入设置二、如何获取水平或者垂直的输入的代码三、如何获取当前人物的x和y的值三、如何简单写出控制人物水平移动的代码四、如何设定游戏的帧率五、如何控制渲染顺序六、如何调整摄像机摄像范围大小七、如何对Hierachy中的图进行分…

【MySQL面试复习】谈一谈你对SQL的优化经验

系列文章目录 在MySQL中&#xff0c;如何定位慢查询&#xff1f; 发现了某个SQL语句执行很慢&#xff0c;如何进行分析&#xff1f; 了解过索引吗&#xff1f;(索引的底层原理)/B 树和B树的区别是什么&#xff1f; 什么是聚簇索引&#xff08;聚集索引&#xff09;和非聚簇索引…

原型设计工具Axure RP

Axure RP是一款专业的快速原型设计工具。Axure&#xff08;发音&#xff1a;Ack-sure&#xff09;&#xff0c;代表美国Axure公司&#xff1b;RP则是Rapid Prototyping&#xff08;快速原型&#xff09;的缩写。 下载链接&#xff1a;https://www.axure.com/ 下载 可以免费试用…

代码随想录算法训练营第四十一天|1049.最后一块石头的重量II、494.目标和、474.一和零

1049.最后一块石头的重量II 思路&#xff1a;将石头分为两堆&#xff0c;他们两个的重量最接近&#xff0c;碰撞的话&#xff0c;此时剩下的重量最小&#xff0c;故此时想到动态规划&#xff0c;但是我个人感觉很容易被陷入本道题的一些条件&#xff0c;比如说x<y&#xff0…

一个Post请求入门NestJS的路由与控制器

​ NestJS的控制器 控制器负责处理传入请求并向客户端返回响应。 控制器的目的是接收应用的特定请求。路由机制控制哪个控制器接收哪些请求。 通常&#xff0c;每个控制器都有不止一条路由&#xff0c;不同的路由可以执行不同的操作。 在使用了脚手架的项目中&#xff0c;我…

【Java程序员面试专栏 算法思维】四 高频面试算法题:回溯算法

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊回溯算法,主要就是排列组合问题,所以放到一篇Blog中集中练习 题目关键字解题思路时间空间岛屿数量网格搜索分别向上下左右四个方向探索,遇到海洋…

生成式 AI - Diffusion 模型的数学原理(5)

来自 论文《 Denoising Diffusion Probabilistic Model》&#xff08;DDPM&#xff09; 论文链接&#xff1a; https://arxiv.org/abs/2006.11239 Hung-yi Lee 课件整理 讲到这里还没有解决的问题是&#xff0c;为什么这里还要多加一个噪声。Denoise模型算出来的是高斯分布的均…

【VTKExamples::PolyData】第三十八期 Outline

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例Outline,并解析接口vtkOutlineFilter,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. Outline // Create…

Sora的潜力与影响:对视频制作、广告、娱乐等行业的深度解析

随着技术的飞速发展&#xff0c;OpenAI推出的Sora模型已经引起了广泛关注。作为一款强大的视频生成工具&#xff0c;Sora不仅改变了视频制作的传统模式&#xff0c;更对广告、娱乐等多个行业产生了深远影响。本文将深度解析Sora的潜力与影响&#xff0c;探讨其在视频制作、广告…

Python自定义logger模块(附Demo)

目录 1. 内置logger2. 自定义logger 1. 内置logger Python标准库中的logging模块提供了日志记录的功能 允许开发者通过创建日志记录器、处理程序和格式化器来控制日志的生成和输出 以下是logging模块的一些主要组件和概念&#xff1a; 日志记录器 (Logger)&#xff1a;整个…

Vue(Day01)——第一个Vue程序

直接引用的网址方式&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><script src"https://u…

python opencv鼠标操作图片

目录 一:图片垂直移动 二:图片水平移动 三:图片缩放 鼠标操作函数: 你可以使用 cv2.setMouseCallback() 函数来为一个特定的窗口设置一个鼠标事件回调函数。这样,每当鼠标在该窗口上执行某种动作(如移动、点击、双击等)时,该回调函数就会被调用,并且会传递一些参数…