posts - 311, comments - 0, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
随着游戏国际化的发展,很多游戏都会在多个国家发行,那么其中有一个很重要的工作就是游戏的本土化,包括里面的文字,画面,情节等等都要符合该国的语言和文化以及法律等等。那么在NGUI中,我们的本土化最主要的就是语言的显示。那么,在该教程中,我将根据NGUI的官网教程,实现英文和中文的转换(我们要摒弃那个好像是德文的例子,呵呵,那个德国国旗暂时不改了,等说道制作altas再来了解)。

首先先制作一个窗口背景,我这里只用简单的窗口来表示,不关注美术方面的问题,我表示这个界面做得有点丑了!在这里有两点要注意,在创建每一个组件的时候,其Font参数为3699Font字库(该字库点击下载3698font.unitypackage导进Unity中就好了),接着,每一个Label的z轴都要稍微向前平移一些,不然会消失。那个下拉菜单的Option设置成Language,如图所示


1.         接着创建两个txt文件,命名为English.txt和Chinese.txt。我们将从这两个txt文件中获取文字描述。我建议不要用monodevelop编辑器来操作,因为它支持中方字体实在太糟糕,我选用UltraEditor编辑器来做,有人说动用visualStudio,这样有点大材小用了。
English.txt文件内容如下:
 
    

Flag = Flag-US
Language = English
English = English
chinese = 中文
Info = Localization example
Sound
Music
Desc = English localization
Paragraph = This example shows how to implement localization using NGUI. In order to localize a widget, simply attach [000000]UILocalize[-] script to it. The script will localize the sprite if it's a [000000]UISprite[-], or the text if it's a [000000]UILabel[-]. If you want to localize something else, just implement the [000000]OnLocalize[-] function. Either way, the actual data is defined via text assets specified on the [000000]Localization[-] script which must be present in the scene.
   

Chinese.txt内容如下:
Flag = Flag-FR
Language = 中文
English = English
Chinese = 中文
Info = 本土化示例
Sound = 音效
Music = 音乐
Desc = 中文本土
Paragraph = 《老人与海》写的是老渔夫桑地亚哥在海上的捕鱼经历,描写老人制服大鱼后,在返航途中又同鲨鱼进行惊险的搏斗,然而作品中的形象却具有很强的象征意蕴。他用大马哈鱼象征人生的理想和人类作为生命本身所不可避免的所具有的欲望,用鲨鱼象征无法摆脱的悲剧命运,用大海象征变化无常的人类社会,而狮子则为勇武健壮,仇视邪恶,能创造奇迹的象征,桑地亚哥则是人类中的勇于与强大势力搏斗的“硬汉子”代表,他那捕鱼的不幸遭遇象征人类总是与厄运不断抗争却无论如何都无法试图去改变命运。
   

这两个txt文件先留着。创建一个空游戏对象,命名为Localization,并为其添加一个Localization组件(Component->NGUI->Internal->Localization)。打开该组件,把Starting Language设置成English,Languages中的size设置成2,把english.txt赋值给Element0,把chinese.txt赋值给Element1。如图所示

为每个Label(除了PopupList中的Label)添加一个Localize组件(Component->NGUI->UI-> Localize),打开该组件,可以看到该组件下面有一个参数为Key,这个参数就是用来设置关键字的,也就是在txt中“=”号前面的名称。我们把这些label一一中的Key设置成我们需要的关键字(Voice和Music的Label只要添加这个组件,不用为它的Key赋值),例如如图所示

选择PopList,为其添加一个LanguageSelection组件(Component->NGUI->Interaction-> Select Language)。现在点击播放试试,可以看到,已经可以在两个字体之间转换了

现在只剩下国旗没换了,选择国旗的Sprite,也为其添加一个Localize组件,设置其key为Flag。这些key都和txt文件中的key一一对应的。点击播放,ok,成功。
现在剩下最后一个问题,当你选择那个下拉菜单时,文字会消失掉,通过观察发现,下拉菜单在点击之后会新建一个名为Drop-down List的新游戏对象,如图所示

选择里面的label,会发现,那些label的z轴都在0的数值上,我们前面已经提到,如果要显示中文字体,需要把这些label的位置往外拉出一些,在该例子中将成为负值。我本来想修改下它的源代码,后来发现,只要把窗口的背景往后挪一些就ok了,好,那么我们把这个窗口的背景往后挪1个单位,如图所示


Ok,问题解决!

还有,我看下拉菜单里面那个chinese太碍眼了,如果那些对英文一窍不通的人,都不知道chinese到底是什么东西,所以,我索性把chinese.txt文件名改成”中文.txt”(没双引号的,不要忘了把改完名的txt文件重新复制给Localization中的element1)。哈哈,居然这样也可以,最后效果如下