Files
agame/docs/limboai-stable/_i18n/trans/batch02.json
T
2026-10-15 16:30:44 +08:00

95 lines
11 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"88": "查看任务属性与黑板",
"89": "当你在 LimboAI 调试器中点击某个任务时,它的属性会显示在远程检视面板(Remote Inspector)中,其中包含 <l1>Blackboard</l> 引用。点击 <l2>Blackboard</l> 可以打开它,查看整条作用域链上的所有变量,并按作用域分组。你还可以实时修改变量值,这对测试和调试游戏 AI 很有帮助。",
"90": "创建自定义任务",
"91": "默认情况下,用户任务应放在 <1/> 目录中。你可以在 <2/> 中为用户任务设置其他位置(要看到这些选项,需要在项目设置中启用 <3/>)。",
"92": "用户任务目录下的每个子目录都会被当作一个分类。因此,如果你创建了一个名为 “motion_and_physics” 的子目录,其中的自定义任务会自动归类到 “Motion And Physics” 下。",
"93": "创建自定义任务时,请<b>继承以下基类之一</b>:<l1>BTAction</l>、<l2>BTCondition</l>、<l3>BTDecorator</l>、<l4>BTComposite</l>。关于任务类型的更多内容,可阅读<l5>行为树简介</l>。",
"94": "<b>🛈 注意:</b>为了帮助你编写新任务,你可以通过 “Misc → Create script template” 菜单项向项目中添加脚本模板。",
"95": "<l1>Blackboard</l> 的使用方法见<l2>在任务中访问黑板</l>。",
"96": "任务的结构",
"97": "示例 1:一个简单的动作",
"98": "示例 2:InRange 条件",
"99": "用 C# 创建任务",
"100": "自定义任务可以使用以下脚本模板:",
"101": "使用 Blackboard 共享数据",
"102": "为了在不同任务与状态之间共享数据,我们用到了一个称为 <l1>Blackboard</l> 的特性。<l2>Blackboard</l> 充当中央仓库,任务和状态可以在其中存取具名变量,从而实现无缝的数据交换。每个行为树或状态机实例都拥有自己专属的 <l3>Blackboard</l>。它可以存储多种数据类型,包括对象和资源。",
"103": "借助 <l1>Blackboard</l>,你可以轻松地在行为树中共享数据,让行为树里的任务更加灵活。",
"104": "在任务中访问黑板",
"105": "每个 <l1>BTTask</l> 都能访问 <l2>Blackboard</l>,这为数据交换提供了直截了当的机制。下面是一个在 GDScript 中与 <l3>Blackboard</l> 交互的示例:",
"106": "如果你访问的变量持有对象实例,并且该实例可能为 null 或已被释放,可以这样写:",
"107": "建议给变量名属性加上 <1/> 后缀,如上例所示。这样检视面板就能为该变量提供更便捷的属性编辑器。这个编辑器允许你选择变量,或把它加入黑板计划(blackboard plan),并在黑板计划中不存在该变量时显示警告图标。",
"108": "<b>🛈 注意:</b>在代码中设置变量时,该变量不需要事先存在。",
"109": "编辑黑板计划(Blackboard Plan)",
"110": "黑板计划与每个 <l1>BehaviorTree</l> 资源相关联,它决定 <l2>Blackboard</l> 在每个新的 <l3>BehaviorTree</l> 实例中如何初始化。BlackboardPlan 资源存储 <l4>BehaviorTree</l> 初始化所需的默认值、类型信息和数据绑定。",
"111": "要从黑板计划中添加、修改或删除变量,请按以下步骤操作:",
"112": "打开 LimboAI 编辑器,加载你想编辑的行为树。",
"113": "在编辑器中,点击标签页内的小按钮。这会在检视面板中打开 <l1>BlackboardPlan</l>。",
"114": "在检视面板中点击 “Manage…” 按钮,显示黑板计划编辑器。",
"115": "在黑板计划编辑器中,你可以添加、删除或重新排列变量,并修改它们的数据类型与提示(hint)。",
"116": "提示会向检视面板提供关于该变量的附加信息,例如整数变量的最小值和最大值。更多内容请参阅 <l1>Godot 官方文档中的属性提示</l>。",
"117": "你可以直接在检视面板中指定变量的默认值。",
"118": "在 BTPlayer 中覆盖变量",
"119": "每个 <l1>BTPlayer</l> 节点也有一个 “Blackboard Plan” 属性,可以覆盖 BehaviorTree 中黑板变量的值。这些覆盖只对 BTPlayer 所在的场景生效,不会影响使用同一个 <l2>BehaviorTree</l> 的其他场景。要修改这些值:",
"120": "在场景树中选中 BTPlayer 节点。",
"121": "在检视面板中找到 “Blackboard Plan” 属性。",
"122": "覆盖你想要的值,为特定场景定制黑板变量。",
"123": "任务参数",
"124": "在某些情况下,让行为树任务导出参数会很有帮助,这些参数既可以<b>绑定到黑板变量,也可以由用户直接指定</b>。为此,LimboAI 提供了一些以 “BB” 开头的特殊参数类型,例如 <l1>BBInt</l>、<l2>BBBool</l>、<l3>BBString</l>、<l4>BBFloat</l>、<l5>BBNode</l> 等等。完整列表请查阅 <l6>BBParam</l> 类文档。",
"125": "用法示例:",
"126": "把 BT 中的变量连接到 HSM:变量映射",
"127": "每个 <l1>BTState</l> 都会为其 BehaviorTree 实例创建一个新的黑板作用域。由于 BehaviorTree 是可复用的资源,可以在不同上下文或不同智能体上运行,它们不会自动看到 HSM 中定义的变量。在运行时,HSM 变量通常可以通过父作用域黑板在 BT 中访问,但推荐的访问方式是通过<b>映射(Mapping)</b>。",
"128": "注意",
"129": "要了解更多关于作用域的内容,请参阅 <l1>Blackboard</l>。",
"130": "当 BehaviorTree 和 HSM 各自在它们的 <l1>BlackboardPlan</l> 资源中声明变量后,编辑器会在 BlackboardPlan 检视面板中提供<b>映射(Mapping)</b>区域。映射是连接相关计划之间变量的既定且推荐的方式。",
"131": "关于映射的要点",
"132": "映射会把两个变量连接起来,使它们在运行时表现为同一个逻辑变量。",
"133": "被链接的变量会在两个作用域中立即同步更新 —— 它们在内存中共享同一份状态(没有轮询,也没有复制)。",
"134": "映射是显式的:由你决定 BT 将哪些变量作为输入和输出暴露出来。",
"135": "链接是双向的 —— 输入与输出之间没有区别。",
"136": "映射不会自动创建新变量 —— 变量必须已经存在于两个黑板计划中,才能被链接。",
"137": "检视面板操作流程",
"138": "分别在各 BlackboardPlan(例如 HSM 计划和 BT 计划)中定义所需的变量。",
"139": "在场景中选中 <l1>BTState</l> 节点,或选中行为树内的 <l2>BTSubtree</l>。",
"140": "在检视面板中选择 Blackboard Plan 属性。",
"141": "在 BlackboardPlan 资源检视面板中,找到<b>映射(Mapping)</b>区域。",
"142": "通过配对变量(<1/>)来创建映射。",
"143": "启动时映射会被应用,变量会为运行中的实例自动建立链接。",
"144": "编程替代方案:在代码中链接变量",
"145": "你也可以直接用 <l1>Blackboard.link_var</l> 在代码中链接变量:",
"146": "最佳实践",
"147": "在 BT 自己的 BlackboardPlan 中声明所有 BT 依赖,而不要依赖父作用域。",
"148": "使用<b>映射(Mapping)</b>明确声明哪些变量应与 HSM 共享。",
"149": "优先使用基于检视面板的映射流程,以获得更好的清晰度和编辑器支持;仅在需要运行时或编程式设置时才使用 <1/>。",
"150": "避免在 BT 任务内部写入 <1/>,除非你有非常明确的理由,并且接受由此带来的耦合。",
"151": "进阶话题:黑板作用域",
"152": "LimboAI 中的 <l1>Blackboard</l> 可以作为另一个 <l2>Blackboard</l> 的父作用域。这意味着,如果某个变量在当前作用域中找不到,系统就会到父级 <l3>Blackboard</l> 中查找。这样就形成了“黑板作用域链”,链中每个 <l4>Blackboard</l> 都可以拥有自己的父作用域,而且链中黑板的数量没有上限。需要注意的是,<l5>Blackboard</l> 不会修改父作用域中的值。",
"153": "系统会自动创建作用域,以避免上下文相互独立的环境之间发生命名冲突:",
"154": "在 <l1>BTNewScope</l> 内部。",
"155": "在 <l1>BTSubtree</l> 装饰器之下。",
"156": "对于定义了非空黑板计划的 <l1>LimboState</l>。",
"157": "在 <l1>LimboHSM</l> 节点之下:会在根层级创建一个新作用域,每个 <l2>BTState</l> 子节点也会获得自己独立的作用域。",
"158": "在多个智能体之间共享数据",
"159": "黑板作用域机制也可以用来在多个智能体之间共享数据。在下面的示例中,我们有一组智能体,希望让它们共享一个共同的目标:",
"160": "在这个示例中,<l1>blackboard.top()</l> 访问 <l2>Blackboard</l> 链的根作用域。我们通过代码把该作用域赋给组内的每个智能体:",
"161": "总而言之,<l1>Blackboard</l> 作用域链不仅能避免状态机、行为树与子树之间可能出现的命名冲突,还可以用来在多个智能体之间共享数据。",
"162": "调试黑板变量",
"163": "调试运行中的项目时,你可以在远程检视面板中查看 <l1>Blackboard</l> 变量。在 LimboAI 调试器中点击某个任务以查看其属性,然后点击 <l2>Blackboard</l> 引用,即可看到整条作用域链上的所有变量,并按作用域分组。变量可以实时编辑,以辅助调试。对于状态机,在远程场景树(Remote Scene Tree)中选中 <l3>LimboState</l> 节点,就能以同样的方式访问它的 <l4>Blackboard</l>。",
"164": "访问场景树中的节点",
"165": "有几种方式可以从 <l1>BTTask</l> 中访问智能体场景树里的节点。",
"166": "<b>🛈 注意:</b>智能体场景树的根节点可以通过 <l1>scene_root</l> 属性访问。",
"167": "使用 <1/> 属性",
"168": "使用 <1/> 属性",
"169": "使用黑板计划",
"170": "你可以在编辑器中<l1>创建一个黑板变量</l1>,类型为 <2/>,并让它在 <l3>BTPlayer</l> 的黑板计划中指向合适的节点。默认情况下,当运行时实例化黑板时,任何 <4/> 变量都会被替换为对应的节点实例(见 <l5>BlackboardPlan.prefetch_nodepath_vars</l>)。",
"171": "BTPlayer.prefetch_nodepath_vars 属性应设置为 <1/>。",
"172": "创建状态机",
"173": "本指南将展示如何使用 <l1>LimboHSM</l> 搭建并使用状态机。",
"174": "初始化",
"175": "要使用 <l1>LimboHSM</l> 状态机,你首先需要在代码中初始化它。这通常是在脚本的 <2/> 函数中完成。下面是一个示例:",
"176": "在这个示例中,我们首先声明状态机以及要使用的各个状态。然后在 <1/> 函数中为各状态添加转换。最后初始化状态机,并将其设为活动状态。",
"177": "状态示例",
"178": "你可以在脚本中定义状态的行为,并把该脚本挂到状态节点上。下面是一个状态示例,它会在 <1/> 上播放动画并等待动画播放完毕:",
"179": "在这个示例中,<1/> 方法会在进入该状态时被调用,并播放指定的动画。<2/> 方法每帧都会被调用,用来检查动画是否播放完毕。如果已播放完毕,它就派发 <3/> 事件,从而可能转换到下一个状态。"
}