当前位置: 首页 > news >正文

Unity脚本一键修改所有预制体

需求

预制体中的Text组件默认是使用Unity的内置字体Arial。

但是在Unity2022之后,Text组件就被弃用了,内置字体Arial也移除了。

如果项目从2022之前的版本升到2022,那么Text组件的字体文件会自动改为LegacyRuntime.ttf文件。

其中LegacyRuntime.ttf文件是没有中文的。

所以我们需要将所有预制体的Text组件一键替换为我们存放在Assets目录下的字体

代码

using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.UI;public class FontUpdater : EditorWindow
{private Font font;[MenuItem("工具/Update Font")]public static void ShowWindow(){GetWindow<FontUpdater>("Font Updater");}private void OnGUI(){GUILayout.Label("Update All Fonts");if (GUILayout.Button("Update Fonts")){FindTextComponentsInAllPrefabs();}}private void FindTextComponentsInAllPrefabs(){font = AssetDatabase.LoadAssetAtPath<Font>("Assets/ArtFont/simsun.ttc");Debug.Log("FontName:" + font.name);// 查找所有预制体string[] prefabGUIDs = AssetDatabase.FindAssets("t:Prefab", new[] { "Assets" });List<string> prefabsWithText = new List<string>();foreach (string prefabGUID in prefabGUIDs){string prefabPath = AssetDatabase.GUIDToAssetPath(prefabGUID);GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);if (prefab != null){// 在预制体中查找 Text 组件Text[] texts = prefab.GetComponentsInChildren<Text>(true);if (texts.Length > 0){prefabsWithText.Add(prefabPath);Debug.Log($"Prefab: {prefabPath} contains {texts.Length} Text components:");foreach (Text text in texts){Debug.Log($"  - {text.gameObject.name}");text.font = font;}EditorUtility.SetDirty(prefab);}}}AssetDatabase.SaveAssets();if (prefabsWithText.Count == 0){Debug.Log("No Text components found in any prefabs.");}}
}

其中要注意:

"Assets/ArtFont/msyh.ttc"这个路径是随意存放的。

EditorUtiliy.SetDirty(prefab)。

需要将prefab对象修改为脏对象,AssetDatabase.SaveAssets()才能成功。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring之@ComponentScan注解
  • HTTP/1.1
  • 【ACM独立出版丨接受全文摘要投稿】2024年生物医药和智能技术国际学术会议(ICBIT 2024,8月23-25)
  • Python知识点:如何使用Cocos2d进行游戏编程
  • 计算机网络 DNS HTTP HTTPS,缓存
  • HarmonyOS鸿蒙开发岗位面试中关于组件的问题总结
  • 【React】自定义右键菜单
  • 网站如何被Google收录?
  • Python | Leetcode Python题解之第328题奇偶链表
  • unity游戏开发003:深入理解Unity中的坐标系
  • windows与linux服务器之间通过scp快速并行的文件传输
  • 拒绝内卷:利用4P营销理论打造汇报PPT
  • JVM-运行数据区(堆、栈、元空间)
  • 黑神话悟空游戏攻略大全 黑神话悟空内存占用多少 国产3A级游戏《黑神话:悟空》评测代码已发 黑神话悟空测试画质130g MacBook可以玩黑神话悟空吗
  • C++:命名空间与输入输出
  • [Vue CLI 3] 配置解析之 css.extract
  • 0基础学习移动端适配
  • Angular2开发踩坑系列-生产环境编译
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • PaddlePaddle-GitHub的正确打开姿势
  • Spring Boot快速入门(一):Hello Spring Boot
  • ViewService——一种保证客户端与服务端同步的方法
  • Yii源码解读-服务定位器(Service Locator)
  • 成为一名优秀的Developer的书单
  • 将回调地狱按在地上摩擦的Promise
  • 那些被忽略的 JavaScript 数组方法细节
  • 一道面试题引发的“血案”
  • 正则表达式小结
  • 自动记录MySQL慢查询快照脚本
  • Java数据解析之JSON
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • #07【面试问题整理】嵌入式软件工程师
  • #1014 : Trie树
  • (02)Unity使用在线AI大模型(调用Python)
  • (1)Android开发优化---------UI优化
  • (C++)八皇后问题
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (多级缓存)多级缓存
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (算法)N皇后问题
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (一)VirtualBox安装增强功能
  • (源码分析)springsecurity认证授权
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • .gitignore文件—git忽略文件
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .net 7 上传文件踩坑
  • .net MySql
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈