95 lines
11 KiB
JSON
95 lines
11 KiB
JSON
{
|
||
"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/> 事件,从而可能转换到下一个状态。"
|
||
}
|