推荐阅读
大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新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和坑,让后来人可以有些参考。 |
我怎样才能完成http://php.net/manual/en/function.call-user-func-array.php在ruby中?所以我可以这样做:classAppdeffoo(a,b)putsa+benddefbarargs=[1,2]App.send(:foo,args)#doesn'tworkApp.send(:foo,args[0],args[1])#doeswork,butdoesnotscaleendend 最佳答案 尝试分解数组App.send(:foo,*args)
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
我需要在RubyonRails中实现无向图G=(V,E)并考虑构建一个Vertex和一个Edge模型,其中Vertex有_多条边。由于边恰好连接两个顶点,您将如何在Rails中执行此操作?您是否知道任何有助于实现此类图表的gem或库(对重新发明轮子不感兴趣;-))? 最佳答案 不知道有任何现有库在ActiveRecord之上提供图形逻辑。您可能必须实现自己的Vertex、EdgeActiveRecord支持的模型(请参阅Rails安装的rails/activerecord中的vertex.rb和edge.rb/test/fixtur
我想这样组织C源代码:+/||___+ext||||___+native_extension||||___+lib||||||___(Sourcefilesarekeptinhere-maycontainsub-folders)||||___native_extension.c||___native_extension.h||___extconf.rb||___+lib||||___(Rubysourcecode)||___Rakefile我无法使此设置与mkmf一起正常工作。native_extension/lib中的文件(包含在native_extension.c中)将被完全忽略。
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道rubyonrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit