美文网首页
NodeCanvas——行为树节点介绍

NodeCanvas——行为树节点介绍

作者: BacteriumFox | 来源:发表于2019-09-30 13:44 被阅读0次

    1.Leafs(叶柄)

    叶柄没有子节点,位于树的末端。

    Action(行为)

    行为
    • 行为节点将执行分配的动作任务。“行为”节点将返回“正在运行”,直到“行为任务”完成时为止,此时它将根据分配的“行为任务”返回成功或失败。NC附带了各种不同的“行动任务”以供使用。

    • Success:成功完成分配的行为任务后

    • Failure:分配的行为任务完成失败后

    • Running:分配的操作任务尚未完成时。

    Condition(条件)

    条件
    • 条件节点将执行条件任务,并根据该条件任务返回成功或失败。 NC附带各种要使用的条件任务。
    • Success:如果分配的条件任务为真
    • Failure:如果分配的条件任务为假

    2.Composites(复合行为)

    Sequencer(序列)


    Sequencer按从最高优先级到最低优先级(从左到右)的顺序执行其子节点。

    • 成功:当所有子节点都成功完成
    • 失败:当任何子节点返回失败时
    • 正在运行:当前正在执行的子节点正在运行时

    Selector(选择器)


    Selector按从高到低的优先级(从左到右)的顺序执行其子节点。

    • 成功:当任何子节点返回成功。
    • 失败:当所有子节点都返回失败时。
    • 正在运行:当前正在执行的子节点正在运行时。

    Probability Selector(概率选择器)

    概率选择器将根据被选择的机会选择并执行子节点。如果该选定子级返回成功,则概率选择器还将返回成功。如果返回失败,则将选择一个新的子代。如果没有孩子返回成功,则概率选择器将返回失败,或者如果引入了“失败机会”,则可能立即返回失败。

    • 成功:当选定的子节点返回成功时。
    • 失败:选定的子节点返回失败时,或者由于“失败机会”而未选择任何子节点。
    • 正在运行:当选定的子节点返回运行时。

    Priority Selector(优先选择器)

    image

    优先级选择器与普通选择器相似,但是将根据每个子级具有的优先级来选择子级执行的顺序。连接子节点后,将显示优先权重,您可以直接或通过Blackboard变量进行更改。

    • 成功: 第一个子节点返回成功时。
    • 失败:当所有子节点都返回失败时。
    • 正在运行: 当前子节点正在运行。

    Parallel(并行)

    image

    并行将同时执行其所有子级。可以将其设置为具有Sequencer或Selector的策略,如下所示:

    如果设置为First Failure,则任何子代返回Failure后,并行将重置所有当前的Running子代,并返回Failure。否则,当所有孩子都返回成功后,它将返回成功。

    如果设置为First Success,则任何子级返回Success时,并行将重置所有当前的Running子级,并也返回Success。否则,当所有孩子都返回失败后,它将返回失败。

    • 成功:如果设置为“首次成功”,则任何孩子返回成功。如果设置为“首次失败”,则当所有孩子都成功完成时。
    • 失败:如果设置为“首次失败”,则任何子级返回失败时。如果设置为“首次成功”,则所有子项均以失败告终。
    • 正在运行:任何孩子在跑步时。

    Flip Selector(反转选择器)


    翻转选择器的工作方式与普通选择器类似,但是一旦子节点返回成功,它就会移到末尾(右)。因此,以前将始终先检查失败的孩子,最近再检查成功的孩子。

    • 成功: 当子级返回成功时。
    • 失败: 当所有子级都返回失败时。
    • 正在运行:当前子级正在运行。

    Switch(开关)

    Switch节点可以切换Enum或Integer值。根据当前的Enum或整数值,它将执行相应的子节点。如果另一个子节点先前在运行,它将被中断。连接子节点后,连接将读取枚举或整数值。

    • 成功:当前子节点返回成功时。
    • 失败:当前子节点返回失败,或者枚举或整数值相对于连接的子节点数超出范围。
    • 正在运行:当前子节点返回正在运行。

    Step Iterator(步骤迭代器)

    步骤迭代器类似于选择器。如果子节点返回成功,则返回成功,如果所有子节点返回失败,则返回失败。唯一的区别是,它会记住哪个子级返回成功,并从下一个子级开始下一次执行,以便在下次再次执行步骤迭代器时按顺序进行。

    • 成功:子节点返回成功时。
    • 失败:当所有子节点都返回失败时。
    • 正在运行:当前子节点正在运行时。

    3.Decorators(装饰节点)

    Interruptor(中断节点)

    Interuptor被分配了条件任务。如果条件为真或变为真,则子节点将在运行中被中断,并且中断器将返回失败。否则,中断器将返回子节点返回的任何内容。

    • 成功:子节点返回成功时。
    • 失败:子节点返回失败时,或者即使子节点正在运行时,分配的条件为true或变为true。(打断了)。
    • 正在运行:子节点返回运行时。

    Conditional(条件节点)

    仅当指定的条件为true时,条件语句才会执行其子节点,然后它将返回子节点返回的任何内容。如果条件为假,但子节点尚未运行,它将返回失败。因此,换句话说,如果条件即使成功了一帧,则子节点将执行并且即使条件不再成立也不会被中断。

    • 成功:子节点返回成功时。
    • 失败:子节点返回失败,或者条件为false且子节点尚未运行时。
    • 运行:子节点返回运行时。

    Inverter(逆变器)

    逆变器会将其子节点的成功和失败返回状态重新映射为相反的状态。 成功:将子节点重新映射到成功时。

    • 成功:子节点返回失败时。
    • 失败:子节点返回成功时。
    • 正在运行:子节点正在运行时。

    Repeater(中继器)


    Repeater会重复其子级Number次,或者直到它返回指定的状态,或者Forever。

    • 成功:如果为“Repeat Times(重复次数)”,则子节点在最后一次重复时返回成功。如果为“Repeat Until(重复直到)”,则子节点返回成功且所需状态为成功时。
    • 失败:如果为“Repeat Times(重复次数)”,则子节点在最后一次重复时返回失败。如果为“Repeat Until(重复直到)”,则子节点返回失败且所需状态为失败时。
    • 运行:只要重复。

    Filter(过滤器)

    按特定的Numbers次数或每特定的时间量(例如Cooldown)过滤对其子节点的访问。默认情况下,如果将其过滤,则关于其父节点,该节点将被视为“不活动”。取消选择此选项将返回失败。

    • 成功:访问子节点并返回成功时。
    • 失败:访问子节点并返回失败时,或“受限时不活动”被关闭。
    • 正在运行:访问子节点并返回运行。

    Iterator(迭代器)


    迭代器将迭代从黑板获取的列表。在每次迭代中,将使用提供的名称将当前迭代的元素保存在同一黑板上,并将执行子节点。

    可以选择将Iterator设置为在装饰的节点返回成功或失败后立即终止迭代。如果未设置任何终止条件(NONE),或者如果列表已被迭代且不满足终止条件,则Iterator将返回上一次返回的迭代子执行的结果。

    如果选中了“重置索引”,则迭代器将在重置时将当前迭代的索引重置为零,否则该索引将保留,除非它是列表的最后一个索引。将其视为“for each”。

    • 成功:当列表被迭代并且子节点返回成功时,或者如果设置为“First Success(首次成功)”,则子节点首次返回成功。
    • 失败:迭代列表并且子节点返回失败,或者如果设置为“‘First Failure(首次失败)”,则子节点首次返回失败。
    • 运行:只要迭代就可以了。

    Timeout(暂停节点)

    如果子节点的运行时间超过以秒为单位指定的时间,则超时装饰器将中断子节点“运行”。否则,它将返回子节点返回的任何内容。

    • 成功:当子级返回成功时。
    • 失败:当子级返回失败或超时时。
    • 正在运行:子级返回跑步时。

    Wait Until(等待,直到)

    Wait Until将返回运行,直到分配的条件任务变为真。如果在子级被勾选后条件变为假,它将不会中断它。仅当孩子尚未运行时才检查该条件。

    成功:当子级返回成功时。
    失败:当子级返回失败时。
    正在运行:当子级返回正在运行或条件为假时。

    Optional(可选结果)

    Optional Decorator在执行装饰的子节点时不考虑其成功或失败返回状态,因此就预期状态而言,它对于父节点是可选的。

    • 成功:永远不会。
    • 失败:从不。
    • 正在运行:子节点正在运行时。

    Guard(守护)

    如果具有相同指定令牌的另一个Guard已经在保护(运行)该令牌,​​则防止装饰的子级运行。对于为同一代理运行的所有行为树,保护是全局的。

    受保护时,可以将其设置为返回失败或正在运行。

    • 成功:当子级返回成功时。
    • 失败:当子级返回失败或保护处于活动状态并设置为受保护时返回失败。
    • 正在运行:当子级返回运行或受保护时处于活动状态,并设置为在受保护时返回运行。

    Override Agent(替代代理)

    Override Agent将为行为树的其余部分以及直接从Blackboard变量中选择或获取的游戏对象设置另一个Agent。这意味着该装饰器下面的每个节点现在都会被该新代理选中。此装饰器是NodeCanvas允许您从单个“主”行为树控制多个代理或动态更改代理的方式之一。

    • 成功:子节点返回成功时。
    • 失败:子节点返回失败时。
    • 运行:子节点返回运行时。

    4.Sub-Behaviours(子行为)

    SubTree(行为树)

    子树是整个其他行为树。SubTree节点将返回分配的行为树的根节点(“开始”)返回的任何内容。根行为树的代理和黑板将向下传递到子树,因此所有可用的黑板变量将相同,并且也可用于子树。

    成功:当SubTree的根节点返回成功时。
    失败:当SubTree的根节点返回失败时。
    正在运行:当SubTree的根节点返回“正在运行”时。

    NestedFSM(状态机)

    可以为嵌套的FSM分配整个FSM。执行后,FSM将启动。只要FSM正在运行,NestedFSM节点将返回“正在运行”。您可以为成功指定FSM的一种状态,为失败指定另一种状态。一旦嵌套的FSM进入任何一种状态,FSM将停止,并且该节点将相应地返回成功或失败。否则,当嵌套的FSM完成时,它将返回成功。此行为树的代理和黑板将传递给嵌套FSM,因此根行为树的所有可用变量也将相同,并且可用于嵌套FSM。

    成功:当嵌套FSM进入选定的成功状态时,或嵌套FSM完成时。
    失败:嵌套的FSM进入选定的失败状态时。
    运行:只要嵌套FSM正在运行。

    相关文章

      网友评论

          本文标题:NodeCanvas——行为树节点介绍

          本文链接:https://www.haomeiwen.com/subject/mwvcpctx.html