找回密码
 立即注册
查看: 248|回复: 0

Unity多语言方案

[复制链接]
发表于 2022-7-27 11:56 | 显示全部楼层 |阅读模式
这是我的第一篇技术文章,我打算从最近开发的一个多语言功能开始写起,逐步积累,逐步总结,good good study ,day day up!
首先我们常用的多语言有以下几种方式:

  • 修改预制体中的Text信息。
  • 修改预制体中的Image。
  • 根据相关配置信息修改类似物品描述、提示信息。
  • 针对不同语言制作不同版本的预制体(不是很推荐,以前做项目遇到过这种功能的多语言实现)。
下面来介绍一下整体思路和方法:
1.怎么切换语言

首先新建一个脚本(非mono)用于在editor环境下修改语言


创建了这样的脚本以后就可以在Unity的菜单栏下面发现多了一个语言切换功能


怎么添加√的功能呢?你需要添加如下代码:


这样你就能发现你的语言切换功能可以标识你当前是什么样的语言了。
我们切换语言一般有俩种情况,一种是在运行的情况下玩家切换语言版本,另一种则是在编辑器的情况下,策划或美术需要看到当前预制体的修改情况而进行语言切换,所以切换的具体方法则是设计成这样:


当游戏没有运行的时候会获取所有相关的预制体,并修改其中的内容,这里可以针对路径进行优化,避免搜索到其他无用的相关信息。


这里的例子是修改文本的内容,修改图片的方法也是一样,之后会介绍文本和图片切换语言的方法。


2、关于文本和图片的语言切换

我们之前在切换语言的时候调用了LanguageManager.OnLocalize(),这个其实是一个委托,我们在enable的时候把需要修改语言的方法给注册进去,用来切换语言,添加[ExecuteInEditMode]是为了在editor的环境下进行使用。图片的修改方法也是类似,只是从text变成了sprite


3、关于LanguageData

LanguageData是用来加载配置的,不同项目的配置信息会不一样,我贴一个小例子


根据配置表获取到数据后,根据LanguageSwitch中切换的语言类型来决定当前需要的信息,相关枚举可以这样设计,也可以不使用PlayerPrefs而用其他方式来进行语言配置的保存


关于配置表

首先多语言有一个需要注意的问题就是当维护到后期表的数据会相当庞大,如果初期不设计好表格,后面插入数据的时候就会导致整体崩盘,这里有俩个方法:
1、使用ID段来进行配置:由自己或策划严格规定好id段,按照大类型、小模块这样来划分,比如Tips信息、预制体修改、物品信息这样的大类型可以用100、200、300这样的Id头,而像登录,主页面,这些模块可以用12345这样来标识,比如登录相关的第一条tips则为1001001。
2、使用序列+模块+Key的形式来排列:我们给每一条数据设置一个模块和对应的id,比如login 1这样的俩个字段,当我们需要插入数据的时候只需要login 2 即可,而主键序列的排序我们可以不用关心直接重新排序就好,不会影响其他模块的使用。
第一次写文章,写的不好的地方还请大家多多见谅,有什么想法和建议欢迎大家提出来互相学习。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-18 17:22 , Processed in 0.104933 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表