60 lines
2.1 KiB
C#
60 lines
2.1 KiB
C#
using System;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
|
|
namespace BaseGames.Localization
|
|
{
|
|
/// <summary>
|
|
/// 每种语言对应的 TMP 字体配置。
|
|
/// 创建资产:Assets/Data/Localization/FontConfig.asset
|
|
///
|
|
/// 用法:将此资产拖入 <see cref="BaseGames.Localization.LocalizedText"/> 的
|
|
/// <c>Font Config</c> 字段,切换语言时 LocalizedText 将自动替换字体和材质。
|
|
///
|
|
/// CJK 语言通常需要单独的字体资产,无需为每个文本节点逐一指定,
|
|
/// 只需在此 SO 中统一配置一次即可全局生效。
|
|
/// </summary>
|
|
[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<FontEntry>();
|
|
|
|
/// <summary>
|
|
/// 尝试获取指定语言的字体配置。
|
|
/// 返回 false 表示该语言未配置,调用方应保持现有字体不变。
|
|
/// </summary>
|
|
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;
|
|
}
|
|
}
|
|
}
|