智能变量
Yarn Spinner 中的智能变量是改善对话和叙述流程的有效方法。与仅在显式设置时更改的常规变量不同,智能变量在每次访问时都会根据定义它们的表达式重新计算其值。
为什么使用智能变量?
- 代码可读性:它们通过使用有意义的名称而不是复杂的条件来使您的对话脚本更具可读性。
- 集中逻辑:定义一次条件并在整个游戏中使用它。
- 维护:当游戏机制发生变化时,您只需要更新智能变量声明,而不是每个使用它的地方。
- 抽象:它们将复杂的游戏状态检查隐藏在简单的描述性名称后面。
实际例子
在 Yarn Spinner 中创建智能变量非常简单: <<declare>> 命令后跟变量名(带有 `---
description: Learn about using smart variables that determine their value at run-time.
icon: binary-circle-check
创建: 2026-03-06T09:03
更新: 2026-03-06T10:26
智能变量
Yarn Spinner 中的智能变量是改善对话和叙述流程的有效方法。与仅在显式设置时更改的常规变量不同,智能变量在每次访问时都会根据定义它们的表达式重新计算其值。
为什么使用智能变量?
- 代码可读性:它们通过使用有意义的名称而不是复杂的条件来使您的对话脚本更具可读性。
- 集中逻辑:定义一次条件并在整个游戏中使用它。
- 维护:当游戏机制发生变化时,您只需要更新智能变量声明,而不是每个使用它的地方。
- 抽象:它们将复杂的游戏状态检查隐藏在简单的描述性名称后面。
实际例子
在 Yarn Spinner 中创建智能变量非常简单: <<declare>> 命令后跟变量名(带有 前缀)并为其分配一个 表达 而不是静态值。表达式可以使用 数学运算、逻辑比较,甚至引用其他变量。
例如: <<declare $is_powerful = $strength > 50 && $magic_ability >= 20>>.
每当值改变时,这个智能变量就会自动更新 $strength 或者 $magic_ability 更改,使您的对话能够动态响应玩家的统计数据,而无需额外的代码。
示例1:人物关系
<<declare $player_is_friends_with_sam = $sam_relationship_score > 50>>
<<if $player_is_friends_with_sam>>
Sam: Hey buddy! Good to see you again.
<<else>>
Sam: Oh, it's you. What do you want?
<<endif>>示例 2:物品可用性
<<declare $has_enough_materials = $wood >= 5 && $nails >= 10>>
<<declare $has_required_skill = $carpentry_level >= 3>>
<<declare $can_build_chair = $has_enough_materials && $has_required_skill>>
<<if $can_build_chair>>
Craftsman: You've got everything you need to build that chair now.
<<else>>
<<if !$has_enough_materials>>
Craftsman: You'll need more materials first.
<<else>>
Craftsman: Your carpentry skills aren't quite there yet.
<<endif>>
<<endif>>示例 3:基于时间的事件
<<declare $is_evening = $game_hour >= 18 && $game_hour < 22>>
<<declare $town_shops_open = !$is_holiday && $game_hour >= 9 && $game_hour < 18>>
<<if $is_evening && !$town_shops_open>>
Innkeeper: Most shops are closed now, but you're welcome to stay here for the night.
<<endif>>复杂游戏的好处
当您经常检查或结合多个因素的条件时,智能变量就会发挥作用。它们特别适用于:
- 跟踪复杂的角色状态
- 监控游戏世界状况
- 代表玩家成就或任务状态
- 创建响应多个游戏系统的动态对话
通过使用智能变量,您可以使对话脚本更加直观和可维护,同时保持游戏逻辑井井有条。