前言

考虑到 Unity Crazy Web 2024 GameJam 是外国的比赛,所以我们将多语言添加到了项目的开发计划中。在进行多语言的配置时,就少不了一些好用的插件的支持,就比如 Unity Localization 这款本地化插件。在进行了了解、学习与使用后,它的方便快捷、功能强大为我留下了深刻的印象,所以我第一时间就将这款插件的推荐写了出来,有本地化需求的小伙伴一定能有所收获!


Unity Localization 插件介绍

Unity Localization 是 Unity 官方推出的本地化解决方案,它提供了一个系统化的方法来管理游戏或应用的多语言内容。这个插件从 Unity 2019.3 开始作为预览包提供,并在 Unity 2021.2 中成为正式功能。

主要功能

  1. 文本本地化

    • 支持多种语言的文本翻译
    • 提供智能字符串查找和替换功能
    • 支持文本参数化(如动态插入变量)
  2. 资源本地化

    • 支持本地化纹理、音频、预制体等资产
    • 不同语言可以使用不同的资源版本
  3. 字体管理

    • 自动为不同语言切换合适的字体
    • 支持回退字体设置
  4. Pluralization(复数形式处理)

    • 支持不同语言的复数规则
    • 根据数量自动选择正确的文本形式

核心组件

  1. Localization Tables(本地化表)

    • 以电子表格形式组织翻译内容
    • 支持 CSV 格式导入导出
    • 包含键值对结构(Key-Value)
  2. Localized String

    • 特殊数据类型,表示可本地化的字符串
    • 可以绑定到 UI 文本元素
  3. Locale(区域设置)

    • 表示特定语言和区域设置
    • 包含语言代码、书写方向等信息
  4. Localization Settings

    • 全局本地化设置
    • 管理可用语言和默认语言

工作流程

  1. 安装与设置

    • 通过 Package Manager 安装 Localization 包
    • 创建 Localization Settings 资源
  2. 添加语言

    • 创建或导入 Locale 资产
    • 设置默认语言和备用语言
  3. 创建翻译表

    • 新建字符串表或资产表
    • 添加翻译键和对应语言的文本
  4. 实现本地化

    • 在场景中使用 LocalizedString 或 LocalizedAsset
    • 或通过代码访问本地化内容
  5. 运行时语言切换

    • 通过代码更改 Selected Locale
    • 所有本地化内容会自动更新

代码示例

1
2
3
4
5
6
7
8
9
10
11
// 获取本地化字符串
var localizedString = new LocalizedString("MyTable", "Greeting");
string translatedText = localizedString.GetLocalizedString();

// 动态参数
var stringWithParams = new LocalizedString("MyTable", "WelcomeMessage");
stringWithParams.Arguments = new object[] { playerName };
string message = stringWithParams.GetLocalizedString();

// 切换语言
LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[1];

优势特点

  1. 官方支持:Unity 官方维护,与引擎深度集成
  2. 非破坏性工作流:不会修改原始资源
  3. 动态更新:语言切换时无需重新加载场景
  4. 扩展性强:支持自定义本地化提供程序
  5. 编辑器友好:提供专用编辑器窗口和工具

适用场景

  • 多语言游戏或应用开发
  • 需要频繁更新翻译内容的项目
  • 大型项目需要团队协作管理本地化
  • 需要动态切换语言而不重启的应用

注意事项

  1. 需要 Unity 2019.3 或更高版本
  2. 对于非常简单的项目可能显得过于复杂
  3. 学习曲线相对陡峭,特别是对于复杂用例
  4. 需要合理规划键命名和表格结构以保持可维护性

使用方法

Unity官网教程
本文参考教程

配置

Package Manager 安装插件之后,打开菜单栏 Edit -> Project Settings -> Localization -> Create ,找到Localization,点击Create创建,并选择一个文件目录进行文件保存。

点击 Locale Generator 搜索 zhen 添加中英文配置,第一次添加时会让我们选择一个文件夹目录保存。

Locale Generator 哟用于添加或移除语言,每添加一种语言也会生成对应的配置文件,然后可以修改默认语言为中文,如图:

添加多语言映射

打开菜单栏 Window -> Asset Management -> Localization Tables ,点击 New Table Collectiont 创建表格。
该表格用于建立不同资源之间的对应关系,一个ky对应多个语言的资源,可以选择创建文本表或者资源表。
这里我们选择文本表(String Table Collection)使用,写好表名后点击Create就可以创建了,然后选择一个路径目录进行保存。

此时在 Localization Table 中添加多语言文本即可,配置内容主要是 Key 和对应多种语言的文本。
可通过 Window -> Asset Manager -> Localization Tables 打开该窗口。

实际项目中不一定将多语言内容全写在一个配置表中,不同的文本内容也可以通过创建多个配置表进行填写,让不同的模块自己管理文本内容也是一个不错的选择。

此时在场景中添加一个文本组件 Text ,然后在该组件右侧菜单处点击 Localize ,会自动添加一个 Localization String Event 组件。也可以手动添加 Localization String Event 组件。

此时在该组件中的 String Reference 参数中选择之前配置的多语言文本配置表中的 Key 即可完成多语言的配置。

通过脚本控制语言的切换,测试代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using UnityEngine;
using UnityEngine.Localization.Settings;

public class LanguageManager : MonoBehaviour
{
public void SwitchChineseButton()
{
LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[0];
}
public void SwitchEnglishButton()
{
LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[1];
}
}

索引值为 Localization 的配置项中的多语言的顺序,如下方第一个语言为中文则索引为0.

将脚本挂载到场景中,并在场景中添加两个Button分别绑定切换中英文的方法即可。

这样就完成多语言的配置与使用啦,像动态文本、资源多语言、映射表Excel等就先不多介绍了,有需要可以看上面的参考教程链接。


尾声

Unity Localization 插件为开发者提供了强大的工具来处理游戏本地化的复杂性,特别适合中大型项目或需要支持多种语言和地区的产品。希望能够对有本地化需求的小伙伴带来帮助。那么这次插件的分享就到这里啦,欢迎在评论区讨论你的见解与推荐!

—end—