Skip to main content
摘要:本文聚焦「游戏文本配置方案:富文本、动态参数与多语言架构」,梳理核心概念、关键方法与落地实践。
在现代游戏中,技能描述(Tooltip)不仅仅是一段文字,它是逻辑的视觉化呈现。不仅需要处理数值的动态变化,还要应对复杂的富文本样式(颜色、图标、超链接)以及多语言本地化(L10n)的挑战。 本文档详细阐述了业界通用的文本配置标准和技术实现方案。

1. 核心痛点与设计目标


2. 架构设计:三层解耦模型

我们将文本系统分为三层:配置层 (Template)解析层 (Parser)渲染层 (Renderer)

2.1 配置层 (Excel / Localization Table)

不要在代码中硬编码文本。所有文本应在 Excel 或 Google Sheets 中管理,并导出为 CSV/JSON。 配置示例:
  • {0}: 占位符,将在运行时被实际伤害值替换。
  • <c=dmg>: 语义化颜色标签。
  • <l=buff_burn>: 链接标签,指向 ID 为 buff_burn 的数据。

2.2 解析层 (C# Text Parser)

这是系统的核心,负责将“模版”转换为“最终富文本”。

A. 动态参数注入 (Dynamic Injection)

B. 参数格式化 (Parameter Formatting)

直接注入浮点数会导致 “造成 10.533333 点伤害” 这种丑陋的显示。C# 的 string.Format 原生支持格式说明符,必须充分利用。 常用格式语法: 配置示例(优化后):

C. 语义标签替换 (Semantic Tag Replacement)

不要让策划直接写 Hex 颜色码。建立一个全局样式表(ScriptableObject)。

2.3 渲染层 (Unity TextMeshPro)

使用 Unity 的 TextMeshPro (TMP) 组件进行渲染。
  • 超链接交互: TMP 组件支持 OnLinkPointerClick 事件。

3. 进阶功能:智能文本 (Smart Text)

对于复杂逻辑,简单的 {0} 可能不够。可以引入简单的表达式解析。

条件文本 (Conditional Text)

语法:"Deal {dmg} damage. {if isNight}Stun target.{/if}"
  • 场景:某些效果仅在特定条件(如夜晚、满血)下生效。
  • 实现:解析器检测到 {if} 块时,计算布尔条件。若为 false,剔除块内文本,避免显示无意义的描述。

动态运算 (Math Operations)

语法:"Next level: {dmg * 1.2} damage."
  • 场景:显示升级后的预览数值。
  • 实现:解析器支持基础数学运算,直接根据当前变量算出预览值。

ICU 复数支持 (Plurals)

语法:"Summon {count, plural, one {1 Skeleton} other {# Skeletons}}."
  • 场景:处理 “1 Skeleton” vs “5 Skeletons” 的语言差异。
  • 工具:Unity 插件如 I2 LocalizationSmart String 已内置此功能。

4. Vampirefall 落地建议

推荐技术栈

  • 存储: Excel / Google Sheets (利用 Luban 导出)。
  • 运行时: I2 Localization (处理多语言加载) + TextMeshPro (渲染)。
  • 逻辑层: 自定义 TextFormatter 类。

开发工具 (Editor Tool)

必做工具技能描述预览器
  • 界面:左侧选择技能,右侧显示 TMP 渲染出的富文本。
  • 功能
    • 提供“等级”滑块:拖动滑块,实时看到描述里的数字变化(验证公式绑定是否正确)。
    • 样式切换:一键切换“亮色模式/暗色模式”,检查颜色标签在不同底板下的可读性。

命名规范

  • 颜色标签:使用功能命名,而非颜色命名。
    • <c=buff> (Buff 颜色)
    • <c=green> (绿色)
  • 图标标签:与图集 Sprite 名字保持一致。
    • <s=stat_atk> -> 对应图集里的 stat_atk.png

5. 总结

技能文本系统本质上是一个微型 UI 程序
  • Input: 技能数据 (SkillData) + 本地化模版 (Template)。
  • Process: 注入参数 -> 替换标签 -> 处理逻辑。
  • Output: 带有交互功能的富文本 (Rich Text)。
通过这套架构,我们可以确保描述永远准确(数据驱动)、样式易于统一调整(语义标签),并提供顶级的用户体验(超链接交互)。