在平常我们做任何项目的时候,工具类对于我们来说是必不可少的组成部分,因为工具类可以解决实际问题或者是优化我们已经实现的功能。
当你在做项目的时候,搭建完场景后,前场景中你所创建的UI组件中的Text的字体并不符合你的要求,效果不好或者说是与你的游戏主题不搭。但是你的Text组件又创建的很多,也就是说如果你的UGUI界面已经搭完的情况下,想要更换一种字体的时候,逐个寻找Text更换字体的过程中工作量无形加大,很可能会遗漏并且机械的工作会使人疯狂,那么这个时候使用字体替换工具可以让你操作起来自动化、更加方便快捷、节省时间精力。
字体替换工具是可以帮助我们批量替换场景中Text组件中字体的工具。那你知道如何创建场景中Text的字体替换工具吗?
首先讲一下我的思路:批量修改预制体中存在的Text组件的字体数据,指定某种字体替换到另外一种字体。创建新的Editor窗口和工具,通过代码获取和显示窗口,设置窗口名称并且在菜单窗口中显示Tool工具,点击按钮控件则更换字体,获取当前场景并且判断是否保存最后找到当前场景中的所有Text更换字体(当然,也可以是项目内的所有场景)。接下来讲一下准备工作:
printf("hello world!");
在Assets文件夹中新建一个文件夹命名为Editor并且创建一个脚本FontTools:
代码讲解:
#1
声明三个变量,分别是字体工具窗口为空的变量、替换上来的字体的变量、替换下去的字体的变量。
在Unity的菜单栏中添加Tool工具
#2
写一个展示窗口的方法ShowToolWindow
①判断窗口是否为空,如果为空则获取窗口
②设置窗口的名称
③显示窗口
#3
OnGUI方法,我们用来创建新的Editor窗口和工具来实现自己扩展编辑器的方法。
①OnGUI是用来创建调试工具、创建自定义属性面板、创建新的Editor窗口和工具达到扩展编辑器效果;
②EditorGUILayout.ObjectField表示选择物体;
③通过Font类来选择物体的参数为("被替换的字体", 被替换的字体, 字体类型, true);
④通过Font类来选择物体的参数为("替换的字体", 替换的字体, 字体类型, true);
⑤判断按钮控件是不是"一键替换" 是则调用更换字体方法。
写一个更换字体的方法:
①获取当前场景是什么;
②判断当前场景是否保存,是则显示一个"请先保存当前场景"的对话框再返回;
③判断替换下去的字体和替换上来的字体是不是空的,是则显示一个对话框内容再返回;
④找到当前场景中所有的Text
⑤显示一个"确定"的对话框;
⑥foreach循环一下场景中的Text,判断替换下去的字体是不是空的,不是空的再判断Text的字体等不等于替换下去的字体,如果不等于替换下去的字体则进行下一次循环,当替换下去的字体是空的时候,Text的字体则是替换上来的字体;
⑦显示一个"字体替换完成"的对话框。
#4
完整代码扫描下方二维码,添加助教老师领取
完工 /成果
代码完成后,在Unity中就可以看到通过代码添加的字体替换工具啦!如下图:
1.点击Tools—替换字体—就出现接下来的窗口;
2.选择所要替换下去的字体和替换上来的字体点击一键替换会出现一个弹窗
3.保存过后再次点击一键替换会出现另外一个弹窗并且计算出有多少个Text文本需要替换字体;
4.再次点击一键替换,显示弹窗后确定就替换成功了。
上面是针对当前场景字体替换工具,接下来大家可以看一下针对一个项目中所有场景的Text的字体替换工具是通过对项目中所有场景进行for循环,找到所有场景中的Text文本再进行字体替换。其他的部分与替换当前场景字体的代码大致相同,附上代码:
实现字体替换工具的小功能是大部分是通过代码进行的,在Unity3D中的操作极少,所以大家只要清楚代码的逻辑就可以自己实现这个小功能啦!同时,其他类似的功能也可以用相同的方式实现,比如说批量替换图片、shader、材质等等。我们可以通过这个功能告别那些需要一个个手动更改的机械性工作啦。当新手们遇到难以理解的,可以通过各种渠道去了解这个知识点。
Unity架构师之路
Unity教程 | 墙外的Unity | 免费资源 | 游戏开发日记
长按关注我们添加微信获取教程源代码