使用中文库 由于 3.2 当前不支中文,要 GUI 显示中文字体,需要一些技巧。 在菜单中,选择 GameObject->Create Empty, 创建一个空的 GameObject, 改个合适的名字,如 "MyGUIObject"。MyGUIObject 将充当 GUI 的容器,具体界面的创建及位置都将通过脚本来进行。所 以我们可以不关心这个 GameObject 在场景中的位置。这时层级视图(Hierarchy)如下: 3)创建 GUI Skin 或 GUI StyleUnity 中的界面风格是通过 GUI Style 及 GUI Skin 来进行控制。GUI Skin 由一组 GUI Style 组成。GUI Skin 和 GUI Style 的关系类似于 CSS 中 CSS 文件和 CSS Style 之 间的关系。本教程的重点不在于 Unity GUI 的讲解,相关概念大家可以多参看 Unity Manual。 在项目视图(Project)中选择 Create->GUI Skin 创建一个 GUI Skin,改名为"ChineseFontSkin"。 这时项目视图如下: 在属性视图(Inspector)中对 ChineseFontSkin 简单设置如下: 这时我们还没有中文字体, 字体一项就先用项目中带的 Fluoride 字体, 然后将 Button 中 Normal 的 Text Color 改成黄色。Button 是这个 GUI Skin 中关于按钮的默认 Style。 然后,我们将 Label 中 Normal 的 Text Color 改成绿色。本教程只用到 Button 和 Label。 4)通过脚本创建 GUI 在 Unity 中你可以通过 GameObject 菜单创建 GUI Text 和 GUI Texture 这两个 基本的 GUI 对象。但大部分 GUI 都需要通过脚本创建。我们将用脚本创建一个 Label 和一个 Button。 在项目视图 (Project) 中选择 Scripts 下的 GUI 目录, 在本视图的菜单中旋转 Create->C Sharp Script, 创建一个 C Sharp 脚本,改名为“MyGUI”。 双击 MyGUI 脚本可以在 Unity 自带的 UniSciTE 编辑器中打开脚本进行编辑。但由于 UniSciTE 无法正 确显示中文字符,使用外部 IDE 来编辑带中文的脚本是个好主意。微软的 Visual C# Express 当然是免 费编辑器中的首选, 但对于我们这个简单的脚本来说,Notepad 就足够了。 在 Unity 项目视图中右键点击"MyGUI",在弹出菜单中选择“Show in Explorer”,可以看到我们的脚本文 件。 用 Notepad 打开 MyGUI.cs,输入以下脚本: 这个脚本做的事很简单。先定义一个可设置的 GUISkin 对象 mySkin。在 OnGUI 方法中将 GUI 的 Skin 设为 mySkin, 然后创建一个 Label 和一个 Button。 Label 中显示的中文拷贝自我们站点的 About 页 (上 面截图中文字未显示完整)。保存脚本,用默认的 Ascii 编码保存即可。 回到 Unity, MyGUI 脚本拖放到 MyGUIObject 上。 将 选择 MyGUIObject, Inspector 中将 My Skin 在 设为"ChineseFontSkin"。 运行游戏,可以看到英文文字能显示,但中文都丢了。这是因为我们还没有导入中文字体的缘故。 5) 导入中文字体在 Windows 的 Font 目录下,选择你喜欢的中文字体(这里我们选择微软雅黑),拷贝 至 Unity 项目下的 Assets\GUI 目录下。切换至 Unity,发现 Unity 呈冻结状,此时 Unity 正在进行字体 贴图及字体定义的自动生成工作。根据机器性能及字体大小,导入过程可能较长。(我的机器上需要 10 多分钟。) 等 Unity 完成工作后,可以看到 Project 视图下的 GUI 目录中多了个 msyh 的字体。(或其他你选择的 字体的名称) 在 Project 视图中选择 ChineseFontSkin,在 Inspector 视图中,将 Font 改为刚导入的字体 msyh。再 运行游戏。 中文都可以显示了。你好,Unity! 6)Unity 干了什么及没干什么?在 Unity 中显示中文是不是很简单呢? 再让我们看看 Unity 在背后干了些什么。在 Project 视图中选择 msyh 字体并展开,可以看到 Unity 为每 个字体生成了一个字体贴图(font texture)及一个字体材质(font material)。选择 font texutre, 在 Inspector 视图可以看到该贴图的预览: 一张 16M 的 4096x4096 贴图! Unity 自动替你将微软雅黑中所有可用文字都导成了一张巨大的位图, 而不管你是否真的需要这么多文字。 好处在于, 现在你可以在 Unity 里显示所有微软雅黑字体所支持的文字了。 但是, 为每个字体分配一张 16M 贴图的做法太过奢侈了,对配置较低的机器或是 iPhone 来说更是不可接受。可是在 Unity 真正支持 TTF 字体渲染之前,我们似乎也只好接受这种傻瓜式生成字体贴图的方式。 但我们对此真的无能为力了吗?当然不!既然我们无法控制 Unity 生成字体贴图的方式及过程(虽然通过 Editor API 的 TrueTypeFontImporter 类可以进行有限的控制),至少我们可以对字体本身做些改造, 让它只包含我们所需要的文字。就我们这个简单的项目而言,我们希望看到的字体贴图更应该是下面这样 的: 64K vs 16M。除非你要开发 RPG 或是需要用户输入任意中文,改造字体的成效将非常可观的。 在下一篇教学中我们将介绍如何利用 FontForge 来完成中文字体的瘦身工作。
fontforge unity
最新推荐文章于 2024-01-11 23:01:43 发布