标记

标记允许您将属性添加到文本中,例如 [a]hello[/a]。您的游戏可以使用这些属性来执行更改文本格式、添加动画等操作。

解析文本时,将从文本中删除标签,并且您会收到有关属性适用的纯文本范围的信息。

属性

属性适用于文本范围:

Oh, [wave]hello[/wave] there!

纺纱机将获取此文本,并生成两件事:_纯文本_和_属性_集合。纯文本是指没有任何标记的文本;在这个例子中它将是:

Oh, hello there!

属性表示具有附加信息的纯文本范围。它们包含_位置_、长度、它们的_名称_以及它们的_属性_。

在此示例中,将生成单个属性,位置为 4,长度为 5,名称为“wave”。

属性打开方式如下 [this],并关闭像 [/this].

重叠属性

属性可以重叠:

您可以将多个属性放在一起。例如:

Oh, [wave]hello [bounce]there![/bounce][/wave]

您可以按照您喜欢的任何顺序关闭属性。例如,这与前面的示例具有相同的含义:

Oh, [wave]hello [bounce]there![/wave][/bounce]

自关闭属性

属性可以自动关闭:

[wave/]

自闭合属性的长度为零。

关闭所有标记

标记 [/]close-all 标记。它关闭所有当前打开的属性。例如:

[wave][bounce]Hello![/]

特性

属性可以有属性:

[wave size=2]Wavy![/wave]

该属性“wave”有一个名为“size”的属性,其整数值为 2。

简写属性

属性可以具有简写属性,如下所示:

[wave=2]Wavy![/wave]

这与说这句话是一样的:

[wave wave=2]Wavy![/wave]

该属性“wave”有一个名为“wave”的属性,其整数值为 2。该属性的名称取自第一个属性。

房产类型

属性可以是以下任何类型:

  • 整数
  • 花车
  • “真”或“假”
  • 弦乐

不带引号的单个单词将被解析为字符串。例如,以下两行是相同的:

[mood=angry]Grr![/mood]
[mood="angry"]Grr![/mood]

空白修剪

如果自闭合属性前面有空格,或者位于行的开头,那么它将修剪后面的单个空格。这意味着以下文本会生成纯文本“A B”:

A [wave/] B

[!信息] 如果您不想修剪空白,请添加一个属性 trimwhitespace,设置为 false:

A [wave trimwhitespace=false/] B 
// (produces "A  B")

向玩家显示特殊角色

您可能想要显示包含以下内容的文本 [] 给你的玩家的角色。为了防止标记解析器将其视为特殊字符,您可以_转义_它们。已转义的文本将被视为纯文本,并且不会被解析器解释。

有两种方法可以转义标记:转义单个字符,以及使用 nomarkup 属性。

逃离单身 [] 人物

如果需要转义单个方括号字符,请输入反斜杠 \ 在它前面:

Here's some square brackets, just for you: \[ \]

这对玩家来说将显示为:

Here's some square brackets, just for you: [ ]

反斜杠不会出现在文本中。

[!信息] 如果您需要在文本中显示黑斜杠,请使用两个黑斜杠:

Here's a backslash! \\

这将显示为:

Here's a backslash! \

nomarkup 属性

如果您想要转义较长的文本,或者有很多方括号,那么一次转义单个字符可能会很麻烦。在这些情况下,您可能需要使用转义整个文本区域 nomarkup 属性。此属性使解析器忽略其中的任何标记字符。

如果你想包含像这样的字符 [],将它们包裹在 nomarkup 属性:

[nomarkup]Here's a big ol' [ bunch of ] characters, filled [[]] with square [[] brackets![/nomarkup]

这将显示为:

Here's a big ol' [ bunch of ] characters, filled [[]] with square [[] brackets!

character 属性

character 属性用于标记标识正在说话的字符的行部分。

Yarn Spinner 将尝试通过在如下所示的行中查找字符名称来为您添加此字符:

CharacterA: Hello!
CharacterB: Oh, hi!

标记解析器将标记从行首到第一个的所有内容 : (以及其后的任何尾随空格)与 character 属性。这个属性有一个属性, name,其中包含从行首到行尾的文本 :。如果一个 : 不存在,或者 character 属性已添加到标记中,不会添加。

这意味着上面的示例的处理方式与此相同:

[character name="CharacterA"]CharacterA: [/character]Hello!
[character name="CharacterB"]CharacterB: [/character]Oh hi!

您可以使用它从游戏中的行中删除角色名称。

文本替换标记

Yarn Spinner 标记中的某些属性是替换标记,Yarn Spinner 使用这些属性根据变量的值插入或替换文本。

共有三个内置替换标记:

  • select 标记使用变量的值来选择结果。
  • plural 标记使用数字的值来决定该数字的_复数类别_。
  • ordinal 标记使用数字的值来决定该数字的_序数类_。

所有这三个标记都有一个称为 value,并用它来决定该行中应使用哪些文本。

您也可以自己定制 替换标记.

select

select 标记是最简单的内置替换标记。它需要的值是 value 属性,并用它来选择替代品。

当您需要在一行中插入性别代词时,它特别有用:

// In this example, the $gender variable is a string that
// contains either "m", "f", or "nb".

I think [select value={$gender} m="he" f="she" nb="they" /] will be there!

// Depending on the value of $gender, this line can appear
// as one of these possible options:
I think he will be there!

// or:
I think she will be there!

// or:
I think they will be there!

pluralordinal

pluralordinal 标记在其内取一个数字 value 属性,并使用它来确定该值的复数或序数类。

不同语言中的复数形式

不同的语言对于数字的复数形式有不同的规则。

在许多语言中,用来指代某个事物的术语取决于该事物的数量。这被称为_复数类_:在英语中,你可以有一个_苹果_,但可以有很多_苹果_,并且你可以有一个_鼠标_,但是有很多_老鼠_。

然而,不同语言的规则差异很大。英语有两个:“single”和“other”。然而,例如波兰语有多个。

  • 用英语,你说“一个苹果,两个苹果,五个苹果”。
  • 在波兰语中,你说“一个苹果,两个苹果,五个苹果”。

请注意,波兰语中的“apple”“jabłko”随着数字的变化而呈现多种形式,而英语中则有两种形式。

在 Yarn Spinner 中,各个行会根据用户的区域设置进行替换,但它们周围的逻辑则不会。这意味着,如果您希望能够将游戏翻译成多种语言,则不能编写如下 Yarn 代码:

<<if $apple_count == 1>>
    You have one apple!
<<else>>
    You have {$apple_count} apples!
<<endif>>

如果你这样做,逻辑只适用于与英语具有相同复数规则的语言。 (其中有一些是这样做的,但更多的是不这样做的。)

更复杂的是,复数类有两种主要类型:_cardinal_复数类和_ordinal_复数类。

  • 基数复数类别是我们刚刚看到的类型(例如,“一个苹果,两个苹果”)。
  • 序数复数类指的是事物的位置;在英语中,序数词是“1st、2nd、3rd”之类的东西。

与基数复数类别一样,不同的语言也有不同的序数复数类别。

复数形式为 pluralordinal

Yarn Spinner 能够获取数字和用户当前的区域设置,并为该区域设置确定该数字的正确基数或序数复数类别。然后,您可以使用复数类来决定要显示的文本。

pluralordinal 有一个名为 value,就像 select。然后,它们拥有当前语言环境的每个复数类的属性。这些可以是:

  • one
  • two
  • few
  • many
  • other

这两个标记根据它们使用的复数类的类型而有所不同:

  • plural 选择一个数字的_基数_复数类。
  • ordinal 选择一个数字的_ordinal_复数类。

并非每种语言都使用所有类别;例如,英语仅使用“one”和“other”来表示基数复数类别。

对于每个属性,您提供应显示的文本。

例如:

PieMaker: Hey, look! [plural value={$pie_count} one="A pie" other="Some pies" /]!

// This will appear as either:
PieMaker: Hey, look! A pie!

// or: 
PieMaker: Hey, look! Some pies!

您可以使用以下命令将实际值包含在结果文本中 % 特点。该字符将被替换为提供给 value 财产:

PieMaker: I just baked [plural value={$pie_count} one="a pie" other="% pies" /]!

// This will appear as, for example:
PieMaker: I just baked a pie!"

// or:
PieMaker: I just baked 4 pies!"

ordinal 标记的工作方式类似,但使用序数复数类:

Runner: The race is over! I came in [ordinal value={$race_position} one="%st" two="%nd" few="%rd" other="%th" /] place!

// This will appear as, for example:
Runner: The race is over! I came in 1st place!

// or:
Runner: The race is over! I came in 23rd place!

在游戏中使用创客

您还可以使用标记从 Yarn Spinner 脚本触发游戏中的事件。要了解这一点,请查看 内联事件示例指南.