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;
}
}
}