网站架构的建设,网站建设需要哪些方面,制作相册小程序,dns网站建设大家好#xff0c;我是阿赵。 比较多游戏做了一个游戏包里面包含了多种语言#xff0c;可以游戏内切换。这里分享一个合并多种语言字体的方法。
一、遇到的问题 假设我们游戏需要同时显示简体中文、泰文、老挝文三种语言。 解决方案有多种#xff1a; 1、准备多种字体 … 大家好我是阿赵。 比较多游戏做了一个游戏包里面包含了多种语言可以游戏内切换。这里分享一个合并多种语言字体的方法。
一、遇到的问题 假设我们游戏需要同时显示简体中文、泰文、老挝文三种语言。 解决方案有多种 1、准备多种字体 游戏内准备3种字体文件然后在显示不同语言文字的时候用程序动态切换不同的字体 2、找一种字体可以同时显示三种不同的语言 首先看第一种方案按道理是可行的但会遇到两个问题 1.动态切换字体对于程序的压力很大需要对字体做映射的配置然后还需要在切换字体的时候动态的遍历所有Text组件进行字体更换可能会存在一些不可控的逻辑问题或者渲染问题增加了出错的风险。 2.如果游戏内一行文字里面会同时出现多种语言单一的字体很有可能并不会包括了所有需要显示的文字。 然后看第二种方案如果不替换字体就能显示所有文字这对于程序来说是非常理想的不过这个方案也会遇到一些问题 1.是否真的能找到一种免费可商用的字体包含所有目标语言的字体可能会有但找起来可能会很困难。 2.假如这个字体里面的某种语言的字体效果不理想要怎么办呢比如字体里面的泰文我觉得不够粗想换一种更粗的字体进去要怎么操作 所以这里会提供第三种方案 分别找到各种语言合适的字体然后把它们合并在一个字体里面使用。 接下来将会介绍怎样使用FontForge软件来合并字体。
二、在Unity建立测试项目 这里用Unity引擎里面测试字体用其他引擎也是一样的。我们的目的是得到一个能用的字体Unity引擎只是用来测试字体是否正确。 随便建立一个空的Unity项目假设现在项目里面使用的中文字体是”方正大黑_GBK”字体把它复制到项目里面 接下来用文字”你好”作为测试通过百度翻译可以查到你好对应的泰文和老挝文 在项目里面建一个Text然后把这段文字“你好|สวัสดี|ສະບາຍດີ”输入到Text并把Text的字体指定为方正大黑字体会显示这样 可以看到Unity的Text组件属性栏里面中文和泰文都显示出来了但老挝文直接都不显示。而在场景中的Text也是显示出了中文和泰文但老挝文没有显示出来。 需要注意的是Unity的字体有个这样的规则假如我们指定的字体里面没有对应的语言文字将会拿系统默认字体来使用。这个方正大黑字体其实是不包含泰文的所以Text组件里面显示的泰文其实是系统默认字体。而老挝文没有显示是因为方正大黑字体和系统默认字体里面都没有包含老挝文的字体。 然后我从网上找了一个老挝文的字体Saysettha OT放到项目里面 这次把新字体指定给Text组件 可以看到Unity的Text组件属性里面老挝文还是没有显示不过这个不重要在场景里面的Text文本已经显示出了老挝文了。 但同时存在的问题是中文变了样式然后泰文全部变成了框框。这说明了2个问题 1.老挝字体里面没有简体中文所以“你好”两个字实际上是系统默认字体 2.老挝字体里面虽然没有泰文字体但对应的泰文的部分却使用了框框来替代导致了泰文使用不了系统默认字体。 接下来我要做的事情就是使用FontForge软件把老挝字体合并到方正大黑字体里面让中文、泰文、老挝文都能正确显示。
三、安装FontForge
1、下载FontForge
FontForge是一个免费开源的软件可以去官网下载 https://fontforge.org/en-US/
得到了安装包之后直接安装就行 在安装完之后首次打开软件发现选择语言里面并没有中文可以选择不用害怕先选择English继续。
2、汉化FontForge 接下来对FontForge进行中文显示设置 找到软件安装的目录找到fontforge.bat文件 使用记事本打开这个文件找到这一行 ::set LANGUAGEen把前面的::删掉然后把en改成zh_CN现在这一行会变成
set LANGUAGEzh_CN保存之后关闭。 再次打开软件就发现已经变成中文了 除了中文以外还可以修改成别的文字具体可以用哪些文字可以参考share\locale
四、打开字体 之前我们准备了2个字体分别是方正大黑的FZDHTK–GBK和老挝字体的Saysettha OT 现在用FontForge分别打开这两个字体从上面的选框可以选择盘符然后一级一级的打开路径直到找到字体所在文件夹 由于每次都选择文件夹很烦所以也可以添加收藏 下次就可以直接选择这个收藏过的路径了 选择字体并确定打开 经过相同的操作打开了2个字体
五、修改全字大小
打开元素——字体信息
然后找到通用 会看到两个字体的全字大小是不一样的方正大黑是256而老挝字体是2048。 如果两个全字大小不同的字体合并在一起会有什么后果呢可以试一下在方正大黑的窗口选择元素然后选择合并字体 选择老挝字体 弹窗选“是”: 合并后可以看到方正大黑字体里面多了一些之前没有的文字显示 但很明显这些字体的显示是不对的大了很多倍。这是因为方正大黑的全字大小是256而老挝字体的全字大小是2048。 从这里可以看出全字大小的作用了如果要合并2个字体首先要统一它们的全字大小。 从理论上说按道理是把小的一方改成和大的一方一样大也就是说方正大黑应该改成2048但从实际上说由于方正大黑是主文字老挝文的数量并不多显示也不复杂所以我这里把老挝文从2048改成256也是可以的。这样改合并起来的字体容量会小一些。 修改完之后点“确定”按钮关闭字体信息。会有一个确定弹窗直接点确定就行 修改完之后会发现字体框上面的文字编号会填充了深蓝色这个不用怕只是告诉我们这些字经过了修改还没有保存
六、去除多余的字体
1、合并字体的原则 这里需要知道一个合并字体的原则假如方正大黑是A字体老挝字体是B字体我们以A字体为主然后把B字体合并到A字体它的规则是如果A字体原来已经存在的字体是不会被替换的只会把A字体里面没有的字而B字体有的字合并过去。
2、检查异常文字 在老挝文这边往下拖动会看到一些框框的字体 然后我们看看这个框框对应的文字是什么右键选择某个框框的文字然后选择字形信息 可以找到这个字符本身是什么 回到方正大黑字体选择查看——转到 并输入刚才从老挝字体那边复制的字 会发现这一批框框的字在方正大黑里面都是一个叉的也就是代表在方正大黑里面并不存在这个字。 正是因为这个原因在老挝里面这堆泰文是框框而在方正大黑里面这些泰文是空的。如果不做任何处理直接把老挝字体合并到方正大黑那么方正大黑里面的泰文也会变成框框。
3、删除异常文字 要解决这个问题需要回到老挝字体里面把这些框框的泰文删掉框选所有的框框 鼠标右键选择Clear 这样就把框框的字体删除了
七、保存修改好的字体 上面的操作主要是对老挝字体进行了2个操作 1.修改全字大小 2.删除多余的字符 当然这两步不是必须的比如两个字体本身全字大小一样就无需修改了然后如果没有多余的字符也不需要删除了。 而且也不限于这两步的修改由于字体信息里面的选项还有很多假如发现有其他问题还要根据实际情况再调整。 当修改完成之后就可以把这个老挝字体给保存一下注意我们不要修改原始字体因为可能以后我们需要多次的合并所以每个字体的原字体最好保留。所以这里我选择另存为
这里注意2点 1.保存的格式是sfd格式这个不是我们最终使用的格式只是FontForge软件自己保存的数据 2.由于我这里把老挝字体的全字大小改成了256所以我把这个另存的字体保存为SaysetthaOT_256.sfd这样是方便以后有多个字体之后比较直观的知道这个字体在原字体的基础上修改了什么 保存完之后老挝文字体的FontForge窗口可以关掉了。
八、合并字体 接下来可以进行对字体的合并了回到方正大黑字体的FontForge窗口选择元素——合并字体 选择刚才保存的SaysetthaOT_256.sfd字体并确定 弹出的警告窗选择“是”: 这个时候会看到之前的老挝字体已经被合并进来了字体的大小也是正确的呈现未保存状态。 这个时候如果想保存也可以另存一份sfd格式的字体用于之后编辑调整。也可以不保存直接下一步创建字体。
九、生成字体 在菜单栏里面找到文件——生成字体 在弹出的生成字体窗口里面先给字体命名然后选择字体格式为TrueType 点击Generate按钮进行生成 这时候出现了正在校验的进度条然后有报错 如果点击检查按钮会看到具体这个字体有什么问题 其实这些报错是不影响使用的所以我们可以忽略如果不想在生成的时候进行检查错误那么可以取消“保存前确认”的勾选 再次点击“Generate”按钮字体应该就能生成出来了。 如果还是有报错可以到“选项”里面去掉TrueType渲调提示
十、测试字体 经过了上面的步骤字体已经生成出来了 把字体拖到Text组件上可以看到这次三种语言都已经正确的显示出来了