Unity显示泰语且兼容泰语音标

前言:使用Unity开发的游戏需要支持泰语本地化,以及解决显示泰语时Unity的bug

目录

    • 1、Text组件显示泰语
    • 2、TextMeshPro组件显示泰语

现在很多游戏都需要显示泰语,下面将介绍Unity如何显示泰语,(仅介绍Unity字体方面的设置步骤以及Unity在显示泰语时的bug和解决方案,具体游戏里面如何切换语言不做过多介绍)

Unity里面显示文本的组件主要有下面几个:

  • Text组件
  • TextMesh组件(不介绍)
  • TextMeshPro组件

TextMesh组件的解决方案和Text组件类似,所以不做介绍。本文章中所有提到的资源文件在文末的链接下载。

1、Text组件显示泰语

首先需要找到一套能支持泰语的字体,这里推荐Tahoma.ttf字体,当我们拿到这套字体之后,在Unity里面试试效果。

额。。。看起来很完美,文字都是正常显示的。但是这个音标和泰语的字符中间怎么有这么大的间隙呢?那是因为Unity字体渲染器缺乏对 GPOS 和 GSUB 的支持。因为泰语字体很大程度上依赖于这些功能,所以如果没有它们,渲染的图像看起来很难看。而且对于泰国人来说这样的文字不方便阅读。
在这里插入图片描述
我们将文字复制到其他软件中看看效果:
在这里插入图片描述
可以看到在其他软件中泰语的音标和字符之间没有任何间隙,这样看起来就舒服多了。接下来介绍如何在Unity里面实现类似效果。

对于Text组件显示泰语需要用ThaiFontUtility.Adjust接口在复制之前进行转换一下。在执行一下代码之后泰语音标就正常了。

    private void Update(){text.text = ThaiFontUtility.Adjust("กิจกรรมเช็กอินฤดูใบไม้ร่วงสิ้นสุดแล้ว ระบบตรวจพบว่าคุณมีรางวัลล็อกอินที่ยังไม่ได้รับและได้ส่งทางจดหมายแล้ว กรุณาตรวจรับ");}

在这里插入图片描述
调用这个接口的时机也可以放到Text组件里面给text赋值的时候
在这里插入图片描述
注意:
ThaiFontAdjuster 只能处理特殊字体。这种字体需要具备从 U+F700 到 U+F71A 的扩展字形,从而提供泰语字符的各种位置。这也就是为什么之前推荐使用Tahoma.ttf字体了。

原理:
其实原理就是将原本的字符替换为其他字符,被替换的字符含义不变,只是相对位置变了而已。替换规则如下:

    // ========== EXTENDED CHARACTER TABLE ==========// F700:     uni0E10.descless    (base.descless)// F701~04:  uni0E34~37.left     (upper.left)// F705~09:  uni0E48~4C.lowleft  (top.lowleft)// F70A~0E:  uni0E48~4C.low      (top.low)// F70F:     uni0E0D.descless    (base.descless)// F710~12:  uni0E31,4D,47.left  (upper.left)// F713~17:  uni0E48~4C.left     (top.left)// F718~1A:  uni0E38~3A.low      (lower.low)// ==============================================// [base]             [top] -> [base]             [top.low]// [base]     [lower] [top] -> [base]     [lower] [top.low]// [base.asc]         [top] -> [base.asc]         [top.lowleft]// [base.asc] [lower] [top] -> [base.asc] [lower] [top.lowleft]


2、TextMeshPro组件显示泰语

第一步需要创建一套泰语的SDF字体,这里使用AlibabaSansThaiMedium.ttf字体(任意字体均可,无硬性要求),右键该字体 ->Create->TextMeshPro->FontAsset。
在这里插入图片描述
然后选中改字体点击【Update Atlas Texture】
在这里插入图片描述
按照下面的示意图进行设置
在这里插入图片描述
其中蓝色方框内的内容填入下面这个:

③CНฉ์3v≧ü#fрฬVаผ以FРฌ6y฿&(iуฯYгฟ【I…ฏⅡ 9|~Бโ)lา\□•ย	Lฒ④Ⅴ<⑥ข❦,oี_йล“O⑤ต?м่/한ุ!b¥ГศRธB어Мзจ๋ωuя≦"ếeใหUปEПซ5%hтฮXвพH《2ฎⅠู8{(kñั[еá—KฑⅣ。;~กไr+nิиäฤNด>◆ค็.qыืaлçวQ×ท①สAЛง๊1t·≥!dюо”Tบ》Dชํ4wД$gсíอWฝGСญ7zเ')jะZภ】J②ฐⅢ、:}*,mệóำ] ร
MЧณ=?ฃๆ-pึк’
Pมถ@ฆ้0s≤ ‘cнéษSน

这一套操作下来就可以发现现在TextMeshPro组件现在就可以显示泰语字体了。
在这里插入图片描述
但是,是不是发现了这个位置有点不正常,这里有两个字符重叠了(可以对照上面的Text组件的显示效果)。下面来解决TMP组件显示泰语音标重叠的问题。


解决这个问题也简单,使用AdjustWannayuk工具设置一下音标表的偏移值就行。
在这里插入图片描述
右键SDF的字体文件选择AdjustWannayuk命令,然后就设置好了。这个时候就正常了,而且不需要调用ThaiFontUtility.Adjust接口,音标的位置也是正确的。
在这里插入图片描述
工具以及字体资源的下载地址:
https://github.com/momohola/Unity-Thai-Adjust

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

npm 安装报错(已解决)+ 运行 “wue-cli-service”不是内部或外部命令,也不是可运行的程序(已解决)

首先先说一下我这个项目是3年前的一个项目了&#xff0c;中间也是经过了多个人的修改惨咋了布置多少个人的思想&#xff0c;这这道我手里直接npm都安装不上&#xff0c;在网上也查询了多种方法&#xff0c;终于是找到问题所在了 问题1&#xff1a; 先是npm i 报错在下面图片&…

Microsoft 365 Office BusinessPro LTSC 2024 for Mac( 微软Office办公套件)

Microsoft 365 Office BusinessPro LTSC 2024是一款专为商业用户设计的办公软件套件&#xff0c;它集成了Word、Excel、PowerPoint等核心应用&#xff0c;并特别包含了Microsoft Teams这一强大的协作工具。Teams将聊天、会议、文件共享、任务管理等功能整合到一个平台上&#x…

AI+HPC 部署优化面试范围分享

背景 最近几年生成式AI技术和自动驾驶技术发展发展很快&#xff0c;这些行业对于算法的运行效率有很高的要求&#xff0c;尤其一个模型在训练完成后运行到设备上&#xff0c;需要大量的工作&#xff0c;包括模型的剪枝、蒸馏、压缩、量化、算子优化、系统优化等。 对于传统的…

Go基础编程 - 12 -流程控制

流程控制 1. 条件语句1.1. if...else 语句1.2. switch 语句1.3. select 语句1.3.1. select 语句的通信表达式1.3.2. select 的基特性1.3.3. select 的实现原理1.3.4. 经典用法1.3.4.1 超时控制1.3.4.2 多任务并发控制1.3.4.3 监听多通道消息1.3.4.4 default 实现非堵塞读写 2. …

FPGA读写操作SRAM_CY7C1051DV33

手上有一块sram需要验证下功能是否正常&#xff0c;我门通过fpga来进行读写测试。 1.首先看下芯片手册&#xff0c;我们重点关注时序部分 总结下&#xff0c;就是读写时间不能小于10nS,也就是最高频率100M&#xff0c;所以我们程序设计按100M时钟速率进行设计。注意&#x…

构建稳固与安全的网络环境:从微软蓝屏事件看软件更新流程与应急响应

“微软蓝屏”事件暴露了网络安全哪些问题&#xff1f; 近日&#xff0c;由微软视窗系统软件更新引发的全球性“微软蓝屏”事件&#xff0c;不仅让科技领域为之震动&#xff0c;更是一次对全球IT基础设施韧性与安全性的深刻检验。这次事件源于美国电脑安全技术公司“众击”的一…

2024-07-23 Unity插件 Odin Inspector11 —— 使用 Odin 自定义编辑窗口

文章目录 1 OdinEditorWindow1.1 运作方式1.2 使用特性绘制 OdinEditorWindow1.3 在 OdinEditorWindow 中渲染对象 2 OdinMenuEditorWindow2.1 添加菜单导航栏2.2 添加导航栏示例 ​ Odin Window 可以完整地访问 Odin 绘图系统&#xff0c;不再需要操心 Window 的绘制 方式&am…

BGP选路之Local Preference

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时&#xff0c;BGP协议会对这些BGP路由的属性进行比较&#xff0c;以确定去往该目标网络的最优BGP路由。BGP首先比较的是路由信息的首选值&#xff08;PrefVal)&#xff0c;如果 PrefVal相同&#xff0c;就会比较本…

全方位了解智慧校园行政办公的新闻管理功能

在智慧校园的日常运营中&#xff0c;行政办公系统中的新闻公告功能犹如一座沟通的桥梁&#xff0c;连接着校园内外的每一个角落&#xff0c;传递着最新的资讯与动态。它不仅是智慧校园信息发布的平台&#xff0c;更是校园文化与精神风貌的展现窗口&#xff0c;对于增强师生的凝…

JavaWeb(4)JavaScript入门2—— JS的对象和JSON

一、JS的对象 1.声明语法1 通过new Object()直接创建对象 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><ti…

C#与C++交互开发系列(三):深入探讨P/Invoke基础知识

欢迎来到C#与C交互开发系列的第三篇。在这篇博客中&#xff0c;我们将深入探讨P/Invoke&#xff08;Platform Invocation Services&#xff09;的基础知识。P/Invoke是C#调用非托管代码的一种机制&#xff0c;能够让C#直接调用C编写的动态链接库&#xff08;DLL&#xff09;中的…

外六角半螺纹螺丝主要应用领域

外六角半螺纹螺丝&#xff0c;作为一种常见的紧固件&#xff0c;因其独特的设计和多样的功能而在多个工业领域中占据着重要的地位。这种螺丝的一端具有完整的螺纹&#xff0c;而另一端则可能没有螺纹或螺纹较短&#xff0c;这样的设计使其在某些应用场景中具有独特的优势。 应用…

docker文件挂载和宿主主机文件的关系

一、背景 在排查docker日志时发现在读取docker的文件时找不到文件&#xff0c;在宿主主机上可以查到对应的文件。这里就要理解docker文件目录和宿主主机上的文件的关系。 二、Docker文件系统和宿主系统 Docker文件和宿主文件之间的关系主要体现在Docker容器的运行环境中。Docke…

【目录】8051汇编与C语言系列教程

8051汇编与C语言系列教程 作者将狼才鲸创建日期2024-07-23 CSDN文章地址&#xff1a;【目录】8051汇编与C语言系列教程本Gitee仓库原始地址&#xff1a;才鲸嵌入式/8051_c51_单片机从汇编到C_从Boot到应用实践教程 一、本教程目录 序号教程名称简述教程链接1点亮LCD灯通过IO…

【分布式锁】Redission实现分布式锁

接着上一节&#xff0c;我们遇到了超卖的问题&#xff0c;并通过Redis实现分布式锁&#xff0c;进行了解决。本节 我将换一种方式实现分布式锁。 前提&#xff1a; nginx、redis、nacos 模块1&#xff1a; provider-and-consumer 端口 8023 模块2 rabbitmq-consumer 端口 8021 …

成都云飞浩容文化传媒有限公司电商服务新领航者

在电商的海洋里&#xff0c;无数企业如同繁星般闪烁&#xff0c;但其中有一颗璀璨的明星——成都云飞浩容文化传媒有限公司&#xff0c;以其专业的电商服务和独特的创新理念&#xff0c;成为行业的佼佼者。今天&#xff0c;就让我们一起走进云飞浩容&#xff0c;探索这家公司的…

# Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型

Redis 入门到精通&#xff08;八&#xff09;-- 服务器配置-redis.conf配置与高级数据类型 一、redis 服务器配置–redis.conf 配置 1、服务器端设定 1&#xff09;设置服务器以守护进程的方式运行&#xff1a; daemonize yes|no 2&#xff09;绑定主机地址&#xff1a; bin…

【防火墙】防火墙NAT、智能选路综合实验

实验拓扑 实验要求 7&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 8&#xff0c;分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 9&#xff0c;多出口环境基于带宽比例进行选路…

自动驾驶AVM环视算法–更新超广角视图算法和exe测试demo

1、测试环境 opencv310vs2022 2、使用的编程语言 c和c 3、测试的demo的获取 更新&#xff1a;测试的exe程序&#xff0c;无需解压码就可以体验算法测试效果 百度网盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1ndDcJ6VwexZoLUyUXlwLwg 提取码&#xff1a;q1…

python-爬虫实例(1):获取京东商品评论

目录 前言 道路千万条&#xff0c;安全第一条 爬虫不谨慎&#xff0c;亲人两行泪 获取京东商品评论信息 一、实例示范 二、爬虫四步走 1.UA伪装 2.获取Url 3.发送请求 4.获取响应数据进行解析并保存 总结 前言 道路千万条&#xff0c;安全第一条 爬虫不谨慎&#xff0c;…