本技能用于在 Unity 项目中搭建和配置 Unity Localization,包括语言区域(locales)、字符串表(String Tables)与资源表(Asset Tables)、Addressables 集成,以及通过资源表实现 CJK 字体支持。
一、用途 当用户要求添加语言、翻译 UI 或配置多语言支持时使用。技能覆盖从包安装检查、本地化设置与语言区域创建、表内容填充、UI 本地化与布局,到亚洲语言(CJK)字体支持的完整流程。
二、主要能力
- 包安装检查:通过读取 Packages/packages-lock.json 确认 com.unity.localization 是否已安装,缺失时使用 UnityEditor.PackageManager.Client.Add("com.unity.localization") 安装,并轮询锁文件直至 id 出现,再通过类型加载检查确认程序集就绪。
- 本地化设置与语言区域:查找或创建 LocalizationSettings 资产,创建语言区域并通过 LocalizationEditorSettings.AddLocale 添加。
- 修改本地化表:按 Locale.Identifier.Code 显式匹配填充数据,资源表使用资产 GUID;修改后调用 EditorUtility.SetDirty、EditorEvents.RaiseCollectionModified(Unity 6+)并保存资产。
- UI 本地化与布局:使用完全限定名避免命名空间冲突,通过 LocalizeStringEvent 绑定文本组件,运行时通过 LocalizationSettings.SelectedLocale 切换语言,使用 LayoutRebuilder.ForceRebuildLayoutImmediate 重建布局。
- CJK 字体支持:避免使用 TMP 回退字体,改用资源表按语言区域替换字体;需先导入 TMP Essential Resources;为简体中文、日文、韩文使用对应字体;创建动态多图集 TMP_FontAsset,并将图集纹理与材质作为子资产添加;资源表引用的资产必须标记为 Addressable。
- 自动布局(UGUI):配置 VerticalLayoutGroup、ContentSizeFitter 与 TMP 换行设置。
- 翻译现有项目:通过静态辅助类包装 GetLocalizedString,按字符串长度降序匹配键,使用 UnityEventTools.AddPersistentListener 绑定事件并设置调用状态为 EditorAndRuntime。
三、使用方式 技能以步骤化指南形式提供,包含代码片段与验证步骤。关键操作包括:检查包安装、创建或查找本地化设置、创建语言区域、填充表、绑定 UI 事件、配置 CJK 字体、验证字体与资源表。
四、适用场景 适用于 Unity 项目的多语言本地化配置,尤其是需要支持简体中文、日文、韩文等 CJK 语言的场景,以及需要将现有项目 UI 文本迁移到本地化系统的场景。
五、限制 部分 API 在包未安装时会静默失败或抛出难以理解的错误;TMP Essential Resources 未导入时 TMP_Settings.instance 为 null;资源表不能引用 Resources/ 文件夹内的资产;字体资产删除重建后需手动更新 GUID 并重新添加到 Addressables;持久化监听器必须指向 UnityEngine.Object 上的方法,lambda 会失败。