标签和元数据
标签 是一条信息,您可以将其添加到 Yarn Spinner 中的内容中,以添加有关该内容的附加上下文或详细信息。
您可以在 Yarn 脚本中的两个位置添加标签:可以将它们添加到节点,也可以将它们添加到行。
标签不会向用户显示;相反,它们由您的游戏或 Yarn Spinner 本身使用。
行中的标签
标签可以添加到行和选项的末尾。行上的标签以_哈希符号_开头(#),并且不能包含空格。您可以在行中添加任意数量的标签,但它们必须全部位于脚本中的同一行。
这是带有两个标签的行的示例:
Homer: Hi, I'd like to order a tire balancing. #tone:sarcastic #duplicate
访问标签
您可以从游戏中访问您添加到行中的标签。您访问它们的方式取决于您的游戏引擎。例如,要在 Unity 游戏中访问它们,您可以使用 LocalizedLine.Metadata 属性。
有些标签由 Yarn Spinner 本身使用,而所有其他标签则由您自己的代码使用,因此它们应该包含哪些内容以及如何处理它们取决于您。
特殊标签
某些标签由 Yarn Spinner 内部使用,或者在不存在时为您添加。
#lastline
Yarn Spinner 编译器添加了一个 #lastline 标记到一组选项之前的每一行。
例如,以下摘录:
Hello there.
-> Hi!
-> What's up?
被视为好像它被写成:
Hello there. #lastline
-> Hi!
-> What's up?
在 Unity 游戏中,您可以在自定义中使用此标签 对话视图 当玩家即将看到选项时提前收到通知。
[!信息] 这
#lastline如果有任何内容,例如if语句或命令,位于行和某些选项之间。在这些情况下,您可能希望自己手动添加标签。
#line
这 #line 标签唯一地标识整个游戏对话中的一行或一个选项。这用于识别本地化线路。每一行的 #line 标签必须是唯一的。如果某行或选项没有 #line 标签,它会自动为您添加。
这是一些 Yarn 脚本的示例 #line 标签:
Mechanic: You're in orbit of Jupiter, at a rest station along the main tourism lines. There's a meteorite headed towards here that'll completely destroy this station in three days. #line:4c49c5
Mechanic: And you're a wayfinding robot bolted to the floor of said Jupiter Tourist Station. #line:5b6256
-> Bolted to the floor?! #line:f65d07
Mechanic: Yeah, like all tourist helper bots. #line:1b159b
-> Three days?! #line:40eaf7
Mechanic: More or less. I wouldn't make any long-term plans. #line:3a6c94
有关更多详细信息(包括标签的外观),请参阅 添加线路 ID.
节点中的标签
节点还可以有标签,您可以使用标签来添加描述节点的标签。
节点标签的工作方式与行标签略有不同:它们在标头中定义为 tags 键,并且它们不必以哈希符号开头(#).
这是具有两个标签的节点的示例:
title: Train_Dialogue
tags: #camera2 background:conductor_cabin
---
Why did you stop the train?
Now we won't arrive in time at the next stop!
===
您可以通过对话对象的访问节点上的标签 获取节点标签 方法。
其他元数据
一行的元数据仅由标签组成。因此,您可能会发现 Yarn Spinner 代码和文档可互换地引用_行标签_和_行元数据_。
节点的标头中可以包含其他元数据。此元数据不通过 API 公开,这意味着它主要用于存储附加信息,供编写 Yarn 对话的人员或编辑人员使用。
然而,目前有一个标头定义了 Yarn Spinner 编译器中的特定行为: tracking 标头。
这 tracking 标头
节点可以跟踪它们在游戏过程中是否已经被访问过。为此,Yarn Spinner 编译器需要向节点添加一些特殊代码。为了避免为不需要的节点创建此代码,编译器仅在发现对 visited() 函数中包含节点名称。
在某些情况下,您可能需要编译器将此特殊代码添加到节点,即使没有相应的 visited() 呼叫存在。要指示编译器执行此操作,请包含 tracking 标头的值为 always:
title: Node_Name
tracking: always
---
I know how many times you've been here.
===
此外,使用值 never 指示编译器永远不要将此特殊代码添加到节点。如果您使用 visited 函数的节点设置为从不使用跟踪,它将始终返回 false.
有关访问跟踪的更多信息,请参阅以下文档: 功能.
使用案例
标签和元数据乍一看可能非常复杂,而且它们的用途可能并不明确。以下示例用例解释了如何在您的游戏中使用它们。请记住,这并不是详尽的用例列表。
控制整条线的属性
纱线提供 标记 让您更改线条特定部分的属性。如果大多数属性适用于整行(例如,线条的颜色),则使用标签可能会更容易。
显示最后一行对话以及选项
这 #lastline 标签可用于显示对话的最后一行以及任何选项。这是通过检查一行是否有 #lastline 标签,如果存在,则在继续执行 Yarn 对话之前存储它。
内部工作流程
由于元数据不会直接显示给播放器,因此您可以将元数据用于任何内部工作流程或工具。例如,您可以直接将行标签(例如#needsrevision)添加到 Yarn 文件中的相应行,并将这些行作为内部工具或工作流程的一部分进行处理,而不是跟踪需要在 Yarn 文件外部修改的行(这可能会导致同步问题)。 Unity 集成会自动生成一个 CSV 文件,其中所有行都包含元数据,使这一切变得非常简单!
本土化
如前所述,Unity 的 Yarn Spinner 集成使用行标签来链接本地化的对话行。这在中得到了更好的解释 本地化和资产 使用 Yarn Spinner for Unity 时的部分。
除此之外,翻译者和适配器可以使用每一个元数据来帮助他们了解文本的使用方式,从而获得更好的本地化文本。
在对话窗口外显示特定的对话台词
某些游戏可能要求将某些对话行显示在对话窗口以外的位置(例如,作为项目描述的风味文本,或在充当日志的项目中)。标签可以与在游戏运行时检查标签并复制行的代码一起使用,而不是手动复制这些行(这会增加开发和本地化期间的开销)。