2026-05-10 17:57:15 +08:00

76 lines
2.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @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;
}
/// <summary>
/// Override 调用入口5 个字段强制全部写入,无视 ApplyXxx 开关。
/// 语义:玩家在 prefab 上手动配了 override就是想让这 5 个字段全用配置的值。
/// </summary>
public void ExcuteConfigForce(TextMeshProUGUI textMeshPro)
{
textMeshPro.fontSize = FontSize;
textMeshPro.characterSpacing = CharacterSpacing;
textMeshPro.wordSpacing = WordSpacing;
textMeshPro.lineSpacing = LineSpacing;
textMeshPro.paragraphSpacing = ParagraphSpacing;
}
}
}