Unity3D游戏引擎最大的优势就是跨平台,但除了跨平台之外,游戏能够同时支援多种语言就更完美了,在这方面,Unity也帮我们考虑到了,所以要判断使用者系统使用的语言是相当容易的,可惜的事,在iPhone的系统上却不是这么回事;所以在游戏中只能多个语言设定的功能让玩家自己设定要使用哪种语言,这样也是支援多语言环境,那么在iPhone上应该如何办到呢?
一般而言,要知道使用者的系统设定语言,只需要使用Application.systemLanguage就能得知,例如Application.systemLanguage==SystemLanguage.Chinese就帮玩家切换到中文版;如果Application.systemLanguage==SystemLanguage.English就切换到英文版,然而这种方法虽然使用在windows和mac上都没问题,但在iPhone上,Application.systemLanguage竟然是SystemLanguage.Unknown,不管把iPhone切换到任何语言或是地区都是同样的结果。
经过在网路上搜索,发现许多人也遇到相同的问题,解决的方式很多种,有些方式还蛮复杂的,有些方式只是治标,并不能很准确得知玩家使用的语言,经过测试,以下提供一个我个人觉得最简单直接又最根本解决的办法,就是透过ObjectiveC取得系统语言再储存下来给Unity读取出来判断,对于未研究过ObjectiveC的人,这方法好像有点难度,以下提供实作流程,照着做就能解决问题罗~
1.当Unity编译输出为iPhone应用程式完成之后,会开启Xcode,在此找出AppController.mm。
2.在-(id)initWithFrame:(CGRect)frame{...}的大括号中插入这句[[NSUserDefaultsstandardUserDefaults]setObject:[[NSLocalepreferredLanguages]objectAtIndex:0]forKey:@“YourLanguageKey”];
3.把以上这句代码的YourLanguageKey改为自己喜欢的字串,不改也成。
4.然后在Unity任意的Script中,只要呼叫PlayerPrefs.GetString(“YourLanguageKey”)就能取得代表语系的字串;en代表英文、zh-Hant代表中文繁体、zh-Hans代表中文简体。
步骤2的代码会在Awake()之前执行,所以我把PlayerPrefs.GetString(“YourLanguageKey”)放在Awake()中判断语系,并切换适当的语言环境给玩家;另外,也可在做这个判断之前使用if(Application.platform==RuntimePlatform.IPhonePlayer){...}来分辨目前的执行平台,毕竟只有在iPhone才需要这样特别处理。