Unity3d游戏中实现阿拉伯语文字正常显示
由于项目需求要把游戏文字显示为维语版本(维语属于阿拉伯语系),我先把维语替换进去,之后发现文字是错的(每个字符都分开了,而且显示方向也不对)后来在网上查了一下发现阿拉伯语是从右往左读的,并且阿拉伯语的32个字符单说写法就有126种(同一个字符有多种写法)如下图:
部分维语字符的不同书写形式
首先我们来了解一下维语:
① 维文是以阿拉伯字母为基层的因素文字,由32个字母构成。分为元音、辅音两大类。② 8个元音又分三类;3个前元音、3个后元音、2个央元音。 每个词的元音要么都是前元音,要么都是后元音。这8个元音中有4个同汉语元音等值完全相同,有4个相差较大。③ 24个辅音又分为两类;分别为:10个清音、14个浊音。这24个辅音中有20个同汉语声母辅音等值完全相同,有4个相差较大。④ 注有“新维文”字样的框格,代表发音相差较大。
书写规则:
【单立式】(又称独立式、独写体)用于词末尾单独构成一个音节时。【后连式】(又称连首体)用于词首或音节首。【双连式】(又称前后连式、中连式、连中体)用于两种书写形式的辅音字母之外的其余辅音字母的中间。【隔音双连式】(又称隔音前后连式)用于词中的音节首。【前连式】(又称连尾体)用于词末尾与前面的字母相连。【隔音前连式】用于词末尾与前面的字母连写单独构成一个音节。【简单单立式】用于词末尾而且是两种书写形式的辅音字母之后。【简单后连式】用于词中间而且是两种书写形式的辅音字母之后。
上面这都是在网上看到的怎么感觉有点像我们小时候学习 a o e 一样了呢,哈哈.. 不得不说,真的看不懂!
其实看到这些字符我是一脸懵逼,不是龙舟就是战舰的,最主要的是不认识。
图一 图二
图二中一套字体里为什么会有长得一样的字符呢?点开一个字符,然后左下角你会发现对应的Unicode编码是不同的,并且一个是独立形式,另一个是非独立形式。然而那些错误的字符就是因为使用的非独立形式,才导致再次变形的时候出现错误,我们要做的就是要把这些读取出来的非独立形式转换为独立形式,做好映射!
然后在GitHub那个Demo的源码中我们看到他里面提供了几个接口,分别是判断当前字符要使用前连书体、后边书体、还是前后连书体或独立书体,修改代码如下:
①独立形式Unicode编码的基础之上加1就是前连书体
②独立形式Unicode编码的基础之上加2就是后连书体
③独立形式Unicode编码的基础之上加3就是前后连书体
前面做好映射,有了上面这三个方法就能正常显示字符的书写形式了!(主要就是前连、后连、前后连这几种书写形体,其他形体不再多说)
登录效果图
此篇文章经过自己归纳总结整理出来,仅供参考,如果大家有什么好的修改方式,或是好的意见或建议欢迎留言、交流,一起探讨!