using System; using TMPro; using UnityEngine; namespace BaseGames.Localization { /// /// 每种语言对应的 TMP 字体配置。 /// 创建资产:Assets/Data/Localization/FontConfig.asset /// /// 用法:将此资产拖入 的 /// Font Config 字段,切换语言时 LocalizedText 将自动替换字体和材质。 /// /// CJK 语言通常需要单独的字体资产,无需为每个文本节点逐一指定, /// 只需在此 SO 中统一配置一次即可全局生效。 /// [CreateAssetMenu( menuName = "BaseGames/Localization/Language Font Config", fileName = "FontConfig")] public class LanguageFontConfigSO : ScriptableObject { [Serializable] public class FontEntry { [Tooltip("对应的语言。")] public Language language; [Tooltip("该语言使用的 TMP 字体资产(留空表示沿用默认字体)。")] public TMP_FontAsset fontAsset; [Tooltip("该语言字体的材质预设(留空表示使用字体默认材质)。")] public Material fontMaterial; } [Tooltip("每种语言的字体映射。未列出的语言保持默认字体不变。")] public FontEntry[] entries = Array.Empty(); /// /// 尝试获取指定语言的字体配置。 /// 返回 false 表示该语言未配置,调用方应保持现有字体不变。 /// public bool TryGetFont(Language language, out TMP_FontAsset font, out Material material) { if (entries != null) { foreach (var entry in entries) { if (entry.language != language) continue; font = entry.fontAsset; material = entry.fontMaterial; return true; } } font = null; material = null; return false; } } }