/* * @Author: 白哉 * @Description: TextMeshPro 多语言配置 * @Date: 2025年07月21日 星期一 20:07:39 * @Modify: 2026-05-10 增加 ApplyXxx 开关:未勾选的字段不写入 TMP,避免误覆盖 prefab 原值 */ using System; using TMPro; namespace Logic.Multilingual { [Serializable] public class MultiTextConfig { public MultilingualType Type; // 五对:开关 + 数值。开关=false 时该字段不写入 TMP,保留 prefab 原值 public bool ApplyFontSize; public float FontSize; public bool ApplyCharacterSpacing; public float CharacterSpacing; public bool ApplyWordSpacing; public float WordSpacing; public bool ApplyLineSpacing; public float LineSpacing; public bool ApplyParagraphSpacing; public float ParagraphSpacing; public MultiTextConfig(TextMeshProUGUI textMeshPro, MultilingualType type) { Type = type; // 从已有 TMP 抓取一份配置时,默认所有字段都生效(保留旧的"全量记录"行为) ApplyFontSize = true; FontSize = textMeshPro.fontSize; ApplyCharacterSpacing = true; CharacterSpacing = textMeshPro.characterSpacing; ApplyWordSpacing = true; WordSpacing = textMeshPro.wordSpacing; ApplyLineSpacing = true; LineSpacing = textMeshPro.lineSpacing; ApplyParagraphSpacing = true; ParagraphSpacing = textMeshPro.paragraphSpacing; } public void ExcuteConfig(TextMeshProUGUI textMeshPro) { // Preset 调用入口:仅写入勾选的字段,未勾选的字段保留 prefab 原值 if (ApplyFontSize) textMeshPro.fontSize = FontSize; if (ApplyCharacterSpacing) textMeshPro.characterSpacing = CharacterSpacing; if (ApplyWordSpacing) textMeshPro.wordSpacing = WordSpacing; if (ApplyLineSpacing) textMeshPro.lineSpacing = LineSpacing; if (ApplyParagraphSpacing) textMeshPro.paragraphSpacing = ParagraphSpacing; } /// /// Override 调用入口:5 个字段强制全部写入,无视 ApplyXxx 开关。 /// 语义:玩家在 prefab 上手动配了 override,就是想让这 5 个字段全用配置的值。 /// public void ExcuteConfigForce(TextMeshProUGUI textMeshPro) { textMeshPro.fontSize = FontSize; textMeshPro.characterSpacing = CharacterSpacing; textMeshPro.wordSpacing = WordSpacing; textMeshPro.lineSpacing = LineSpacing; textMeshPro.paragraphSpacing = ParagraphSpacing; } } }