[AI教做人]0基础做多语言模块,实现国际化

发布时间:2026/7/24 20:15:51

[AI教做人]0基础做多语言模块,实现国际化 0基础而且项目内0多语言三个主要待解决没办法 只能一一解决1️⃣ 硬编码常量字符串C# 代码内// CharacterPanelUI.cs UPGRADE, EVOLVE, ??? // DroppedCardPanel.cs UNLOCKED, EQUIP // WeaponPanelUI.cs MAXED OUT, LEVEL // LevelController.cs AREA {0}-{1} // UIComplete.cs LEVEL {0}-{1}, {0} // UILevelNumberText.cs LEVEL {0}2️⃣ ScriptableObject 数据资产中的字符串字段3️⃣ UI 组件类型(预制体 Prefab)混用TMPro.TextMeshProUGUITMP和UnityEngine.UI.Text旧版 uGUI。从0开始步骤Package Manager 安装Unity 的多语言包 Localization步骤一Create 基础Local Set 文件这个步骤很好但是尼会发现卡在第二个步骤只能问第二个ai 了二、打开表格编辑窗口顶部菜单Window → Asset Management → Localization Tables需要先创建2个语言后面有用然后会碰到这问题 ↓如果尼是0基础应该想不到再需要在Asset Manager 的一个菜单而不是在第一个步骤创建的Localize Setting直接操作总之就是必须用这个菜单创建 所有UI文本若2个多语言则至少创建4 个文件db。。。2, 填充多语言 dbai 已经帮尼分析需要这些keysKeyenzhupgrade_buttonUPGRADE升级evolve_buttonEVOLVE进化locked_name??????equip_buttonEQUIP装备unlockedUNLOCKED已解锁maxed_outMAXED OUT已满级level_labelLEVEL {0}第 {0} 关area_labelAREA {0}-{1}区域 {0}-{1}实际上也是让 AI帮尼把这些都填进去只是可能你需要有 dbDatabase的概念如下图ai 命名和我命名的区别ai 只会写Texts这就更需要你懂英文概念是复数的 s三. 代码中使用using UnityEngine.Localization.Settings; // 获取本地化文本 var localizedString LocalizationSettings.StringDatabase .GetLocalizedString(UI_Texts, upgrade_button);4.封装一些代码封装类已创建在Assets/Project Files/Game/Scripts/Localization/I18n.cs用法如下// 无参数 I18n._L(upgrade_button) // → 升级 或 UPGRADE // 带1个格式化参数 I18n._L(level_label, 5) // → 等级 5 或 LEVEL 5 // 带2个格式化参数 I18n._L(area_label, 1, 3) // → 区域 1-3 或 AREA 1-3需要我把项目里所有硬编码字符串替换成I18n._L()调用吗/// summary /// Lightweight wrapper for Unity Localization string lookup. /// Usage: I18n._L(upgrade_button) /// /summary public static class I18n { private const string DEFAULT_TABLE UI_Texts; public static string _L(string key, string table DEFAULT_TABLE) { return LocalizationSettings.StringDatabase.GetLocalizedString(table, key); }如何切换语言原来默认就有3个 “selector 而真的只会从上往下第一个”击中“的Selector 满足的第一所以就是方法一调整一下 Selector的顺序即可方法二直接代码调用但其实selector 肯定已执行只是用代码再改切换多语言一次//在游戏初始化脚本中添加 using UnityEngine.Localization.Settings; // 强制使用英文 LocalizationSettings.InitializationOperation.Completed op { var enLocale LocalizationSettings.AvailableLocales.GetLocale(en); LocalizationSettings.SelectedLocale enLocale; };参考1.Unity 字体文件的 Fallback 一般为空2.Windows 系统已有SimHei黑体路径把C:\Windows\Fonts\simhei.ttf3.scriptcreated)using UnityEngine; using UnityEditor; using TMPro; public class CreateSimHeiFontAsset { public static void Run() { string fontPath Assets/Project Files/Game/Fonts/SimHei/simhei.ttf; string assetPath Assets/Project Files/Game/Fonts/SimHei/SimHei SDF.asset; // Import the font first AssetDatabase.ImportAsset(fontPath, ImportAssetOptions.ForceUpdate); // Wait for import to finish // Load the Font Font simHeiFont AssetDatabase.LoadAssetAtPathFont(fontPath); if (simHeiFont null) { Debug.LogError($Failed to load font at {fontPath}); return; } Debug.Log($Loaded font: {simHeiFont.name}); // Create dynamic TMP_FontAsset // For TMP 3.0, use CreateFontAsset with AtlasPopulationMode.Dynamic TMP_FontAsset fontAsset TMP_FontAsset.CreateFontAsset(simHeiFont); if (fontAsset null) { Debug.LogError(Failed to create TMP_FontAsset); return; } // Set to Dynamic mode fontAsset.atlasPopulationMode AtlasPopulationMode.Dynamic; // Enable multi-atlas textures for large character sets fontAsset.isMultiAtlasTexturesEnabled true; // Save as asset AssetDatabase.CreateAsset(fontAsset, assetPath); // Save the atlas texture too // The texture is created automatically, we just need to make sure its saved EditorUtility.SetDirty(fontAsset); AssetDatabase.SaveAssets(); Debug.Log($Created SimHei SDF Font Asset at {assetPath}); } }4.fallbackFontAssetTable属性 (C#)用的是 TMP_FontAsset 的fallbackFontAssetTable属性在 C# 脚本中fontAsset.fallbackFontAssetTable.Add(simHeiFont);对应的序列化字段在.assetYAML 文件中是m_FallbackFontAssetTable: - {fileID: 11400000, guid: SimHei SDF的GUID, type: 2}5.若有Error(图集Altas)问题是CreateFontAsset创建 Dynamic 字体时没有生成 atlas 纹理和 material。修复内容创建了 1024×1024 的Alpha8格式 atlas 纹理 →SimHei SDF Atlas创建了TextMeshPro/Distance Fieldshader 的 material →SimHei SDF Material将 atlas 纹理绑定到 material 的_MainTex两个子资产都保存在SimHei SDF.asset内现在atlasTextures[0] SimHei SDF Atlasmaterial SimHei SDF MaterialpopulationMode Dynamic— 全部就绪。6.若用Unity 的 多语言库不能在初始化调用 API这是已有的 bug —CharacterPanelUI和UILevelNumberText在字段初始化时调用了I18n._L()Unity 不允许在 MonoBehaviour 字段初始化器中访问 Localization API。这不是我引入的但会阻止编译验证。我先修复它。

相关新闻