Multilingual support for Unity game
Unity多语言支持
- 零代码,编辑器中就可以完成静态资源的绑定和自动切换
- 所见即所得,编辑器中实时预览不同语言版本切换
- 语言模板,解决多语言翻译语素顺序不一致的文本替换问题
- C#特性支持,使用特性[Language("key")]就可以绑定C#脚本中的变量,实现自动切换语言
- 语言资源基于Addressable,可以运行时下载及更新。也可以和项目自有的ab管理系统并存,互不影响
- 除了切换语言以及LanguageTempalte更新参数的时候,其他时候没有额外性能开销
-
- 打开Unity包管理器,点击+按钮,选择Add package from git url,输入https://github.com/treen/lingguo.git ,点击Add按钮,等待安装完成
-
-
创建一个UI面板,添加一个Text组件
-
在Panel节点上添加Language组件,点击"+"按钮添加一个Binder(注意,是Binder,而不是onLanguageChange事件)
-
目前支持Sprite,Texture2D,Mesh,AudioClip,Material,以及派生自ScriptObject的资源,可以应付绝大多数多语言资源替换需求。如有不支持的资源,可以选择使用LanguageGameObject组件,进行整个Prefabe的替换
-
- 当字符串是动态生成的时候,比如 “某某某”使用“某道具”攻击“某某某”,这样的文本替换需求,就得用模板的动态生成能力了。
-
- 在相应语言包的字符串库中添加模板字符串
- 在资产目录右键菜单Create->Lingguo->Template创建模板资源(这里命名为Attack)
- 选中模板资产,将Key设为刚才添加的attack_somebody,并按照模板参数数量,添加相应的参数,在Inspector面板可以预览生成的结果
- 然后回到最开始的字符串绑定例子,通过Language组件,将绑定类型设为template,然后选择Attack模板作为key绑定目标字符串
- 在相应的C#脚本中,可以引用这个资产,就像使用Material一样,然后通过LanguageTemplate.SetParams来实时改变参数,并且自动应用到绑定对象上。
- 也可以脱离Language组件,直接在C#脚本中创建LanguageTemplate资产,通过Bind函数进行绑定,SetKey设置相应的字符串模板Key,SetParams设置参数实时更新绑定字符串对象
如果项目本身就使用Addressable的,按照项目Addressable的管理策略管理多语言资源就可以。
如果不熟悉Addressable,项目本身也没有使用Addressable,那么就把多语言资源当做本地资源,打包前,以默认的配置打包Addressable:从菜单打开Window->Asset Manager->Addressable->Groups窗口,点击Build->New Build->Default Build Script。
从Package包导入Sample后,需要将Assets/Samples/Lingguo/版本号/Sample目录下的AddressabeAssetsData目录移动到Assets目录下,才可以正确运行Sample