表达式和变量

Yarn 语言是一种完整的编程语言,这意味着它支持编写代码,让您可以控制游戏中对话的工作方式。在本节中,您将学习如何使用变量来控制对话。

变量

变量存储信息。变量可以存储三种类型的信息之一:数字字符串布尔值

类型可能的值示例
数量任何整数或小数1、2.5、3468900、-500
字符串任何字母、数字和其他字符的序列,用引号引起来。“你好”、“✓”、“一整句话”。
布尔true 或值 false真,假

每个变量都有一个名称。在 Yarn Spinner 中,所有变量名称均以美元符号 (`--- 创建: 2026-03-06T09:03 更新: 2026-03-06T09:15

表达式和变量

Yarn 语言是一种完整的编程语言,这意味着它支持编写代码,让您可以控制游戏中对话的工作方式。在本节中,您将学习如何使用变量来控制对话。

变量

变量存储信息。变量可以存储三种类型的信息之一:数字字符串布尔值

类型可能的值示例
数量任何整数或小数1、2.5、3468900、-500
字符串任何字母、数字和其他字符的序列,用引号引起来。“你好”、“✓”、“一整句话”。
布尔true 或值 false真,假

每个变量都有一个名称。在 Yarn Spinner 中,所有变量名称均以美元符号 ().

声明变量

_声明_变量意味着告诉 Yarn Spinner 变量存在、它的用途以及它的初始值。

要声明变量,您可以使用 <<declare>> 陈述:

/// The name of the player.
<<declare $playerName = "Player">>

/// The number of gold pieces that the player has.
<<declare $gold = 0>>

/// Is the door to the dungeon unlocked?
<<declare $doorUnlocked = false>>

[!信息] 如果您添加带有三个斜杠的注释 /// 在声明上方,Visual Studio Code 扩展等编辑器工具将使用它来解释变量在其他地方使用时的含义。

例如,这是一个具有以下声明的变量:

/// What day number it is. Starts on day 0, ends on day 3.
<<declare $day = 0 as number>>

当您在 Visual Studio Code 中将鼠标悬停在其上时,将出现一个弹出窗口,其中显示说明:

Hovering over a variable to see its description

[!警告] 如果您在未声明的情况下使用变量,Yarn Spinner 将尝试根据脚本中的使用方式来确定它应该具有什么类型,以及它应该具有什么初始值 - 数字为零,布尔值为 false,字符串为空白文本。当变量未声明时,我们将其称为_隐式_声明。

如果声明一个变量,您可以确保该变量的类型是您想要的类型。声明变量还可以让您控制变量的初始值,并让您添加描述性注释,向其他人(或未来的您!)解释变量的用途。

设置变量

您可以使用以下命令将信息放入变量中 <<set>> 命令。例如,以下代码放置一个_string_, "Hello, Yarn!",进入一个名为的变量 $greeting:

<<set $greeting to "Hello, Yarn!">>

[!警告] 与节点标题一样,变量名称不得包含空格。虽然它们可以包含一系列不同的字符,但第一个字符必须是字母。 一般来说,您的变量仅由字母、数字和下划线组成。

变量和类型

每个变量只能存储一种类型的值。变量可以随时更改其值,但永远不能更改其类型。

例如,以下代码将起作用:

// Set some initial values in some variables
<<set $myCoolNumber to 7>>
<<set $myFantasticString to "wow, text!">>
 
// Now change them!
<<set $myCoolNumber to 8>>
<<set $myFantasticString to "incredible!">>

这是有效的,因为虽然每个变量的值发生变化,但类型却没有变化。但是,以下代码将不起作用

// Set some initial values in some variables
<<set $myCoolNumber to 7>>
<<set $myFantasticString to "wow, text!">>
 
// This will NOT work, because you can't change types!
<<set $myCoolNumber to "8">>
<<set $myFantasticString to 42>>

[!信息] 在 Yarn Spinner 的早期版本中,变量也可以是 null,代表“无值”。从 Yarn Spinner 2.0 开始,变量不再是 null。所有变量都需要有一个值。

<<set $variableName to "a string value">>

变量和表达式

您可以使用变量内的值。例如,数字可以相乘,字符串可以相加,布尔值可以应用逻辑运算(如 andor\)。当值像这样一起使用时,称为表达式

<<set $numberOfSidesInATriangle = 2 + 1>>
 
<<set $numberOfSidesInASquare = $numberOfSidesInATriangle + 1>>

表达式必须是单一类型。您无法在单个表达式中使用不同类型的值。例如,以下代码将不起作用

// This will NOT work, because you can't add a string and a number:
<<set $broken = "hello" + 1>>

[!信息] Yarn Spinner 提供了用于在某些类型之间进行转换的内置函数:

  • string 函数将任何类型的值转换为字符串。
  • number 函数将任何类型的值转换为数字(如果可以解释为数字)。
  • bool 函数将任何类型的值转换为布尔值(如果可以解释为布尔值)。

逻辑运算符

纺纱机支持以下逻辑运算符。其中大多数都有多种编写方式:

  • 平等: eq 或者 is 或者 ==
  • 不等式: neq 或者 !
  • 大于: gt 或者 >
  • 少于: lt 或者 <
  • 小于或等于: lte 或者 <=
  • 大于或等于: gte 或者 >=
  • 布尔“或”: or 或者 ||
  • 布尔“异或”: xor 或者 ^
  • 布尔值“非”: not 或者 !
  • 布尔“与”: and 或者 &&

数学运算符

  • 添加: +
  • 减法: -
  • 乘法: *
  • 分配: /
  • 截断余数除法: %
  • 括号: ( 打开括号并 ) 关闭它们。

操作顺序

纺纱机遵循相当标准的操作顺序,并且当操作员具有同等优先级时,会回退到使用从左到右的方式。

操作顺序如下:

  1. 括号
  2. 布尔否定
  3. 乘法、除法和截余除法
  4. 加法、减法
  5. 小于或等于、大于或等于、小于、大于
  6. 平等、不平等
  7. 布尔与、布尔或、布尔异或

在行中使用变量

要显示变量的内容,请将其放在大括号内 ({ }) 在一行内。该变量的值将出现在其位置。

例如:

选项卡:片段

<<set $variableName to "a string value">>
The value of variableName is {$variableName}.

选项卡:输出

The value of variableName is a string value.

变量和存储

Yarn Spinner 本身不管理变量中信息的存储。相反,您的游戏会在开始运行对话之前向 Yarn Spinner 提供_变量存储_对象。

当 Yarn Spinner 需要知道变量的值时,它会询问您提供的变量存储对象。当 Yarn Spinner 想要设置变量的值时,它将提供变量的值和名称。通过这种方式,您的游戏可以控制数据的存储方式。

变量需要如何存储的具体细节取决于您使用 Yarn Spinner 的游戏引擎。要了解有关 Unity 中变量存储的更多信息,请参阅 变量存储.