管理文本
管理文本功能允许通过可本地化文档管理(替换)整个 Naninovel 中使用的各种文本元素,例如游戏内 UI 字符串和角色的显示名称。
要生成管理文本文档,请从 Naninovel -> Tools -> Managed Text 编辑器菜单打开管理文本工具。
使用“Select”按钮,选择存储管理文本文档的路径(默认应为 Resources/Naninovel/Text),然后按“Generate Managed Text Documents”创建文档。
您还可以使用 Create -> Naninovel -> Managed Text 资产上下文菜单创建自定义管理文本文档。
管理文本文档中的每一行都是以下格式的条目:路径: 值,其中路径是文本变量的路径,值是该变量的值。例如,以下是“DefaultUI”文档的默认内容,其中包含内置 UI 的记录:
您可以编辑这些值,更改将在下次运行时应用。
如果文档已存在,该工具会保留其中的现有值,但会删除不再生成的记录,例如不再通过 ManagedTextProvider 组件或源代码中的 ManagedText 特性引用的记录(稍后会详细介绍)。
提示
要在管理文本值中插入换行符,请使用 TMPro 文本原生支持的 <br> 标签。
管理文本提供者
可以通过 ManagedTextProvider 组件将任意 Unity 游戏对象绑定到管理文本记录,而无需编写任何脚本;将组件添加到游戏对象,指定 Document(文档名称)、Key(文档内的记录名称)并使用 OnValueChanged 事件将值绑定到游戏对象属性。
下面是将存储在“MyCustomDocument”文档中键为“MyCustomText”的管理文本记录绑定到 Unity Text 组件的示例。
如果自定义 UI、文本打印机或选项处理程序使用了 ManagedTextProvider 组件,且其资源已在配置菜单中分配,管理文本工具就会自动生成相应记录。其他情况下,您需要将记录手动添加到单独的文档中,因为该工具会删除其生成文档中手动添加的记录。
管理文本变量
也可以将管理文本记录绑定到源代码中的变量。为此,请将 ManagedText 特性添加到静态字符串字段。该字段的值将在引擎初始化时被管理文本文档中指定的值覆盖。
下面是在 C# 脚本中使用管理文本变量来本地化文本标签的示例。
using Naninovel;
using UnityEngine.UI;
// 继承自 Unity 的 Text 组件,以便我们可以将其作为 Text 组件使用。
public class CustomLabel : Text
{
// “CustomLabel.LabelText”管理文本记录的值将在引擎初始化时赋给
// 下面的变量,并在语言环境更改时更新。
[ManagedText("foo")] // "foo" 是记录的文档名称。
public static string LabelText = "bar"; // "bar" 是默认值。
protected override void Awake ()
{
base.Awake();
text = LabelText; // 将当前记录值赋给标签。
var l10n = Engine.GetService<ILocalizationManager>();
// 当玩家在运行时更改语言环境时更新标签。
l10n.OnLocaleChanged += _ => text = LabelText;
}
}脚本文本
您可以直接从剧本脚本引用管理文本值。当您希望剧本表达式使用可本地化文本时,这很有用。
创建一个名为 Script 的管理文本文档,并添加记录。假设在 Script 管理文本文档中有以下记录:
Greeting1: 嘿!
Greeting2: 你好!
Greeting3: 嗨!— 您可以使用以下方式引用这些值:
@print { random(Greeting1, Greeting2, Greeting3) }Script 管理文本文档可以像其他文档一样进行本地化;当玩家选择另一个语言环境时,文本将自动从相应的本地化文档中引用。
本地化
管理文本本地化遵循与剧本脚本类似的工作流程:
- 在
Resources/Naninovel/Text文件夹中生成(创建/编辑)所需的管理文本文档。 - 在语言环境文件夹(
Resources/Naninovel/Localization/{Locale},其中{Locale}是目标语言环境标签)中运行本地化实用程序。 - 源管理文本文档的本地化文档将出现在相应的语言环境文件夹中。使用它们来添加或编辑翻译。
要更新管理文本文档及其对应的本地化文档,请首先在 Resources/Naninovel/Text 文件夹中运行管理文本生成实用程序,然后在 Resources/Naninovel/Localization/{Locale} 中运行本地化实用程序。默认情况下,这两个实用程序都将尝试保留任何现有的修改(管理文本记录及其翻译),因此您不必在每次更新时重写所有内容。
有关如何使用本地化实用程序的更多信息,请参阅 本地化。
示例
本地化设置示例(包括管理文本)请参阅 本地化示例。如果您在自己的项目中设置本地化时遇到问题,请将其用作参考。
自定义文档
您可以根据自定义需求创建任意数量的管理文本文档,并在引擎处于已初始化状态时在 C# 中使用它们。这些自定义文档的功能与上面讨论的内置类型相同:您可以在 C# 和剧本脚本中访问它们,通过 ManagedTextProvider 组件检索记录,自动生成本地化文档等。
在 Resources/Naninovel/Text 文件夹下通过 Create -> Naninovel -> Managed Text 资产上下文菜单创建一个新的自定义管理文本文档(或通过您选择的资源提供者公开它)。然后可以通过 C# 中的 ITextManager 引擎服务访问该文档。下面是访问名为 Custom 且内容为 Foo: Bar 的自定义文档中的记录的示例。
var manager = Engine.GetService<ITextManager>();
// 文档必须在访问之前加载;
// 通常在自定义系统初始化期间执行一次。
await manager.DocumentLoader.Load("Custom");
var document = manager.GetDocument("Custom");
var record = document.Get("Foo");
Debug.Log($"Key: {record.Key} Value: {record.Value}");