《2022年Unity入门教程-Unity中的中文显示 .pdf》由会员分享,可在线阅读,更多相关《2022年Unity入门教程-Unity中的中文显示 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、前言:之前有朋友发信来问如何在Neoaxis 中显示中文,当时答应写篇教程放上来。后来忙于Im Lulu King!的 制作,就给搁下了。等 Im Lulu King!提交后,却又累得连打开Neoaxis 编辑器的劲都没有了。这一拖就拖到了现在。想来这位朋友应该早已解决Neoaxis 的中文显示问题了吧,再写教程恐意义不大。Unity 的中文显示机制和Neoaxis 颇多类似,今天写这篇文章也算是向那位朋友聊表歉意了。还要说明的是,笔者才刚开始学习Unity,讲解中有错误或不准确之处还望指正,在此先行谢过。1)流程说明Unity 的 Asset 自动导入机制使得在Unity 中显示中文非常简单
2、。你所要做的就是将中文字体放到 Unity 的 Asset 目录下,Unity 会自动将字体中的所有文字转换成一张字体贴图,并生成一个 Unity 字体。之后你可以就通过GUI SkinGUI Style 引用这个字体来显示中文。要在Neoaxis 中显示中文的话,生成字体贴图(或称Bitmap Font)的过程不是自动的,你需要先用 Bitmap font generator 来 生成字体贴图及字体定义,然后通过Neoaxis 自带的字体转换工具将字体定义转换成Neoaxis 的字体定义。对比这两个引擎的字体导入流程,不难发现两者的设计思路差异。Unity 的方式简单高效但可控性差,Neoa
3、xis 的方式略显繁琐,但你可以精确控制每一个步骤。2)准备工作让我们先打开任意一个Unity 项目,这里我们用的是Unity 官方教程中的3D 平台游戏项目。Unity 的 GUI 采用的是Immediate Mode GUI(IM GUI),对于更习惯Windows GUI编程的朋友来说如果第一次接触可能有点不习惯。简单说来在Unity 中创建GUI 不需要进行通常的Init(初始化)、CleanUp(清理)步骤,也不需要进行事件的发送、订阅、处理,相反你只需在每帧的更新周期里同时绘制GUI 及处理相应事件就可以了。如果想更多了解IM GUI 的话,不妨看看 的这段 视频。mollyroc
4、ket 的论坛里也有不少IM 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 的关
5、系类似于CSS 中 CSS 文件和 CSS Style 之间的关系。本教程的重点不在于Unity GUI 的讲解,相关概念大家可以多参看Unity Manual。在项目视图(Project)中选择 Create-GUI Skin 创建一个 GUI Skin,改名为 ChineseFontSkin。这时项目视图如下:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 6 页 -在属性视图(Inspector)中对 ChineseFontSkin 简单设置如下:这时我们还没有中文字体,字体一项就先用项目中带的Fluoride 字体,然后将Button 中Normal 的 Text Col
6、or 改成黄色。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 Sh
7、arp 脚本,改名为“MyGUI”。双 击 MyGUI脚本可以在Unity 自带的UniSciTE编辑器中打开脚本进行编辑。但由于UniSciTE 无法正确显示中文字符,使用外部IDE 来编辑带中文的脚本是个好主意。微软的Visual C#Express 当然是免费编辑器中的首选,但对于我们这个简单的脚本来说,Notepad就足够了。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 6 页 -在 Unity 项目视图中右键点击MyGUI,在弹出菜单中选择“Show in Explorer”,可以看到我们的脚本文件。用 Notepad 打开 MyGUI.cs,输入以下脚本:这个脚本做
8、的事很简单。先定义一个可设置的GUISkin 对象 mySkin。在 OnGUI 方法中将GUI 的 Skin 设为 mySkin,然后创建一个Label 和一个 Button。Label 中显示的中文拷贝自我们站点 的 About 页(上面截图中文字未显示完整)。保存脚本,用默认的Ascii 编码保存即可。回到 Unity,将 MyGUI 脚本拖放到MyGUIObject上。选择 MyGUIObject,在 Inspector 中将My Skin 设为 ChineseFontSkin。运行游戏,可以看到英文文字能显示,但中文都丢了。这是因为我们还没有导入中文字体的缘故。名师资料总结-精品资料
9、欢迎下载-名师精心整理-第 3 页,共 6 页 -5)导入中文字体在 Windows 的 Font 目录下,选择你喜欢的中文字体(这里我们选择微软雅黑),拷贝至 Unity项目下的AssetsGUI 目录下。切换至Unity,发现 Unity 呈冻结状,此时Unity 正在进行字体贴图及字体定义的自动生成工作。根据机器性能及字体大小,导入过程可能较长。(我的机器上需要10 多分钟。)等 Unity 完成工作后,可以看到Project 视图下的GUI 目录中多了个msyh 的字体。(或其他你选择的字体的名称)在 Project 视图中选择ChineseFontSkin,在 Inspector 视
10、图中,将 Font 改为刚导入的字体msyh。再运行游戏。中文都可以显示了。你好,Unity!6)Unity 干了什么及没干什么?在 Unity 中显示中文是不是很简单呢?名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 6 页 -再 让我们看看Unity 在背后干了些什么。在Project 视图中选择msyh 字体并展开,可以看到 Unity 为每个字体生成了一个字体贴图(font texture)及一个字体材质(font material)。选择 font texutre,在 Inspector 视图可以看到该贴图的预览:一张 16M 的 4096x4096 贴图!Unity
11、自动替你将微软雅黑中所有可用文字都导成了一张巨大的位图,而不管你是否真的需要这么多文字。好处在于,现在你可以在Unity 里显示所有微软雅黑字体所支持的文字了。但是,为每个字体分配一张16M 贴图的做法太过奢侈了,对配置较低的机器或是iPhone 来说更是不可接受。可是在Unity 真正支持TTF 字体渲染之前,我们似乎也只好接受这种傻瓜式生成字体贴图的方式。但我们对此真的无能为力了吗?当然不!既然我们无法控制Unity 生成字体贴图的方式及过程(虽然通过Editor API 的 TrueTypeFontImporter 类可以进行有限的控制),至少我们可以对字体本身做些改造,让它只包含我们所需要的文字。就我们这个简单的项目而言,我们希望看到的字体贴图更应该是下面这样的:64K vs 16M。除非你要开发RPG 或是需要用户输入任意中文,改造字体的成效将非常可观名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 6 页 -的。名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 6 页 -