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

news2024/11/11 8:03:28

前言:使用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.coloradmin.cn/o/1945208.html

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

相关文章

Transformer自然语言处理实战pdf阅读

一.第一章 欢迎来到transformer的世界 1.解码器-编码器框架 在Transformer出现之前&#xff0c;NLP的最新技术是LSTM等循环架构。这些架 构通过在神经网络连接使用反馈循环&#xff0c;允许信息从一步传播到另一 步&#xff0c;使其成为对文本等序列数据进行建模的理想选择。如…

多表查询时条件写在where和join on的区别

文章目录 一、初始数据二、问题分析三、总结 先说结论&#xff0c; 1.如果想要拿到主表不受到关联表查询条件的数据的话&#xff0c;那么建议直接将查询条件放到on之后。 2.如果将关联表的条件查询放在where之后&#xff0c;可能会将主表中的数据进行排除。 所以如果想实现的查…

总结一些vue3小知识3

1.限制时间选择器只能选择后面的日期 说明&#xff1a;disabled-date属性是一个用来判断该日期是否被禁用的函数&#xff0c;接受一个 Date 对象作为参数。 应该返回一个 Boolean 值。 <el-date-picker class"w180" v-model"datas.form.timeDate[0]" …

6.6 使用dashboard商城搜索导入模板

本节重点介绍 : 模板商城中搜索模板导入模板修改模板 大盘模板商城地址 免费的 地址 https://grafana.com/grafana/dashboards 搜索模板技巧 详情 导入dashboard 两种导入模式 url导入id导入json文件导入 导入 node_exporter模板 https://grafana.com/grafana/dashboa…

萤石举办2024夏季新品发布会,全力推进“2+5+N”智能家居新生态

7月24日&#xff0c;“智动新生&#xff0c;尽在掌控”2024萤石夏季新品发布会在杭州成功举办。本次发布会上&#xff0c;“智慧生活守护者”萤石深入挖掘应用场景&#xff0c;重磅发布了包括智能健康手表、智能家居AI主机、生态控制器、智家APP等多款创新性的产品及应用&#…

短视频时代,云微客AI批量混剪技术有多厉害?

在数字媒体日益盛行的今天&#xff0c;视频剪辑已经成为了一种热门的技能&#xff0c;加上短视频创作在当下也变得越来越流行&#xff0c;因此云微客短视频AI批量剪辑就显得非常必要。近些年&#xff0c;随着人工智能技术的发展&#xff0c;在很大程度上简化了批量剪辑的过程&a…

linux之网络子系统-本机发包到本机 实现

一、前言 在linux之网络子系统-网络协议栈 发包收包详解-CSDN博客 文章中&#xff0c;详细介绍了跨主机之间的数据包发送的源码流程。除了跨主机&#xff0c;还有本机发包到本机是如何实现的&#xff1f;就是 saddr ip地址为 127.0.0.1 . 二、发送数据包到 127.0.0.1 首先&a…

Go语言编程 学习笔记整理 第2章 顺序编程 前半部分

前言&#xff1a;《Go语言编程》编著 许式伟 吕桂华 等 1.1 变量 var v1 int var v2 string var v3 [10]int // 数组 var v4 []int // 数组切片 var v5 struct { f int } var v6 *int // 指针 var v7 map[string]int // map&#xff0c;key为string类型&#xff0c;value为in…

神经网络理论(机器学习)

motivation 如果逻辑回归的特征有很多&#xff0c;会造出现一些列问题&#xff0c;比如&#xff1a; 线性假设的限制&#xff1a; 逻辑回归是基于线性假设的分类模型&#xff0c;即认为特征与输出之间的关系是线性的。如果特征非常多或者特征与输出之间的关系是非线性的&#…

职场新人必备神器:四款PDF转Word在线转换工具大比拼

关于PDF文件格式转换这件事&#xff0c;其实已经变成了职场人都要会的基础技能了&#xff0c;那么要如何才能够快速且完成的PDF转换为Word呢&#xff1f;今天就让我用自己的毕生所学给大家说说四款pdf转word在线转换免费的工具吧&#xff0c;下面一起来了解一下吧。 一、福昕PD…

【C++】流插入和流提取运算符重载

目录 前言ostream和istream自定义类型的流插入重载自定义类型的流提取重载解决私有问题日期类总接口 前言 我们在上一节实现日期类时&#xff0c;在输入和输出打印时&#xff0c;经常会调用两个函数&#xff1a; void Insert()//输入函数{cin >> _year;cin >> _mo…

ARDUINO 上传失败:上传错误:退出状态 2常见原因及解决方法Failed uploading: uploading error: exit status

前言&#xff1a; 串口监视器可显示各种ESP32打印信息 下述均为USB TYPEC 数据线正常的情况下的报错&#xff0c;如果数据线或串口有问题 原因1&#xff1a;无法连接到ESP32&#xff1a;串行数据流停止&#xff1a;可能存在串行噪音或损坏 解决方法&#xff1a;ESP32电路板是…

一文速览llama 3.1及其微调:长度终于到128K,故可让paper-review数据集直接微调

前言 llama3 刚出来时&#xff0c;其长度只有8K对于包括我司在内的大模型开发者是个小小的缺憾&#xff0c;好在很快&#xff0c;在7.23日&#xff0c;Meta发布了Llama 3.1&#xff0c;其意义在于 很明显&#xff0c;随着llama的影响力越来越大&#xff0c;Meta想让llama类似…

(雷达数据处理中的)跟踪算法(1) --- 整体目录

说明 目标跟踪是雷达数据处理中核心的步骤之一&#xff0c;基于雷达的各项应用往往需要跟踪模块所输出的结果。比如在车载雷达领域&#xff0c;目标跟踪位于点云聚类和ADAS功能实现之间(关于聚类&#xff0c;可以参考我之前的博文[1]&#xff1a;&#xff08;毫米波雷达数据处理…

macOS 10.15中屏蔽Microsoft Edge浏览器的更新提示

文章目录 1.效果对比2.安装描述文件3.停用描述文件4.高级操作&#xff08;可选&#xff09;参考文献 最近在macOS10.15系统&#xff0c;打开Microsoft Edge浏览器&#xff0c;每次打开都有个烦人的提示“ 要获取将来的 microsoft edge 更新&#xff0c;需要 macos 10.15 或更高…

C#实战 | 天行健、上下而求索

本文介绍C#开发入门案例。 01、项目一&#xff1a;创建控制台应用“天行健&#xff0c;君子以自强不息” 项目说明&#xff1a; 奋斗是中华民族的底色&#xff0c;见山开山&#xff0c;遇水架桥&#xff0c;正是因为自强不息的奋斗&#xff0c;才有了辉煌灿烂的中华民族。今…

单向链表知识汇总

提示&#xff1a;本文章参考知乎大佬和一位博主大佬 单向链表 1.前置知识(部分最好记忆)1.1 链表组成1.2 链表插入分三种情况1.2.1头插1.2.2 中间插1.2.2 结尾插 1.3 链表的删除1.51.61.7 2.链表各种接口的实现2.1 链表的打印2.1 链表的节点的申请2.2 单链表节点增加2.2.1 单链…

【常微分方程】

框架 常微分方程的概念一阶微分方程可变离分量齐次方程一阶线性微分方程可降阶的高阶微分方程二阶常系数齐次线性微分方程二阶常系数非齐次线性微分方程 讲解 【1】 常微分方程&#xff1a;是微分方程的特殊情况&#xff1b; 阶&#xff1a;是方程未知函数的最高阶导数的阶数&…

关于pycharm上push项目到gitee失败原因

版权声明&#xff1a;本文为博主原创文章&#xff0c;如需转载请贴上原博文链接&#xff1a;https://blog.csdn.net/u011628215/article/details/140577821?spm1001.2014.3001.5502 前言&#xff1a;最近新建项目push上gitee都没有问题&#xff0c;但是当在gitee网站进行了一个…

【笔记:3D航路规划算法】二、RRT*

目录 一、RRT*于RRT的不同之处1、路径优化&#xff1a;2、成本计算&#xff1a;3、重连线步骤&#xff1a; 二、图解1、初始化2、路径搜索3、效果展示 3D路径规划是在三维空间中寻找从起点到终点的最短或最优路径的一种技术。它广泛应用于无人机导航、机器人运动规划、虚拟现实…