跳转至

动作节点

动作节点就是最终执行游戏逻辑的节点,都是叶子节点。除了官方提供的这些,有特殊逻辑需求的,也可以考虑自己自定义。

节点列表

name desc
AttackWall 攻击围墙
AvoidLight 避光
[已废弃]BeargerOffScreen 已废弃,秋季BOSS熊大在离开屏幕后的行为
ChaseAndAttack 追逐并攻击
ChaseAndAttackAndAvoid 追逐、攻击并躲避
ChaseAndRam 追逐并冲撞
ControlMinions 控制子体
DoAction 通用的动作节点
FaceEntity 面向某个实体
FindClosest 寻找最近的单位
FindFlower 寻找花,用于蜜蜂和蝴蝶。
FindLight 寻找光
Follow 跟随,令生物跟随目标移动
Leash 绑定,令生物绑定在它的领地上,不会到处乱跑
LeashAndAvoid 绑定并躲避
Panic 慌乱,访问到节点时,生物会随机乱窜。
PanicAndAvoid 慌乱并躲避
RunAway 逃离,让生物远离特定目标
[已废弃]StalkerChaseAndAttack 已废弃,官方推荐使用ChaseAndAttackAndAvoid替代
StandAndAttack 站在原地攻击
StandStill 站在原地不动
UseShield 使用护盾防御
Wander 漫游,生物会在自己的家附近游荡。

节点详情

动作节点就是最终执行游戏逻辑的节点,都是叶子节点。除了官方提供的这些,有特殊逻辑需求的,也可以考虑自己自定义。

AttackWall

攻击围墙,构造参数只有一个inst,即要实施动作的角色。这个节点会让角色在一系列判断之后尝试攻击围墙。

AvoidLight

避光,构造参数只有一个inst,即要实施动作的角色。这个节点会让角色尝试躲避光线,并未实际用在任何brain中,但在spier的brain中有require。

[已废弃]BeargerOffScreen

秋季BOSS熊大在离开屏幕后的行为定义。这个节点是专为熊大设计的,在早期的代码中有使用,目前已经废弃,不再使用,所以也无需了解

ChaseAndAttack

追逐并攻击。这个节点的参数inst, max_chase_time, give_up_dist, max_attacks, findnewtargetfn, walk,分别为执行动作的对象, 最大追击时间,最大追击距离,最大攻击次数,寻找新目标的函数,是否走路(否则是跑步)。这个节点会让生物在限定条件下,尝试追逐目标并攻击。这个节点默认的执行流程中,并不包含寻找攻击目标的内容,因此,要么定义findnewtargetfn,要么就通过其它的方式来为生物赋予一个攻击目标。在官方代码中,大多数ChaseAndAttack节点都没有findnewtargetfn,是通过其它方式来实现目标设置的。最常见的就是保持默认设置:生物被攻击后,会把攻击者设置为攻击目标。

ChaseAndAttackAndAvoid

追逐、攻击并躲避。这个节点的参数inst, findavoidanceobjectfn, avoid_dist, max_chase_time, give_up_dist, max_attacks, findnewtargetfn, walk,可以看到基本和ChaseAndAttack类似,区别在于增加了两个参数findavoidanceobjectfn, avoid_dist。也就是这个节点会在追逐攻击的同时,试图躲避某些目标。比如猪人战士,在攻击时回调整自己的攻击位置,避免过于靠近猪王。findavoidanceobjectfn, avoid_dist分别表示找到躲避目标的函数和躲避的距离。

ChaseAndRam

追逐并冲撞。节点参数inst, max_chase_time, give_up_dist, max_charge_dist, max_attacks,分别是生物自身,最大追逐时间,最大追逐距离,最大冲撞距离,最大攻击次数。如果目标与自身的距离超过最大冲撞距离,就无法实行冲撞。这个节点用于秋季BOSS,地下的犀牛BOSS这些具有冲撞能力的BOSS上。

ControlMinions

控制子体。这个节点仅在食人花上使用,控制食人花的子体。它会在子体的控制范围内进行一系列的行动,比如捡起地上的东西或者收获农场的食物等。

DoAction

通用的动作节点。节点参数inst, getactionfn, name, run, timeout,分别是生物自身,获取动作的函数(返回值必须是一个动作),是否在执行动作时跑起来,超时时间。这个节点可以通过设置getactionfn来让生物在满足某些条件的情况下执行特定动作,最常见的就是在某些条件下执行回家的动作。

FaceEntity

面向某个实体。节点参数inst, getfn, keepfn, timeout,分别是生物自身,搜寻目标的函数,保留目标的判断函数,超时时间。这个节点可以让生物面向特定的对象。如果你仔细观察跟随你的生物,你会发现它们在静止时总是面向你的,这就是FaceEntity在发挥作用。

FindClosest

寻找最近的单位。节点参数inst, see_dist, safe_dist, tags, exclude_tags, one_of_tags,分别是生物自身,搜寻距离,安全距离(当搜寻到目标后,会尝试移动到安全距离内),搜寻标签(搜寻单位必须包含全部的标签),排除标签(搜寻单位不能其中的一个标签),其中之一标签(如果这个参数不为空,则可以无视前两个参数,只要单位具有这个参数中的任意一个标签就算是匹配了)。这个节点主要用于寻找符合标签要求的目标,并且自动移动到目标附近。

FindFlower

从名字就可以看出来,这个节点的作用就是寻找花,用于蜜蜂和蝴蝶。

FindLight

寻找光。节点参数是inst, see_dist, safe_dist,分别为生物自身,搜寻距离,安全距离。参数具体含义同FindClosest。这个节点就是为了寻找光源,用于猪人。

Follow

跟随。这个节点会令生物跟随目标移动。

节点参数如下

  • inst: 生物自身
  • target: 搜寻跟随目标的函数
  • min_dist: 最小距离(目标与生物之间的距离低于此距离,生物会远离目标,直到距离大于target_dist)
  • target_dist: 目标距离(最合适的距离)
  • max_dist: 最大距离(目标与生物之间的距离高于此距离,生物会靠近目标,直到距离小于target_dist)
  • canrun: 是否可以奔跑,决定移动时是走还是跑

Leash

绑定。这个节点会令生物绑定在它的领地上,不会到处乱跑。节点参数inst, homelocation, max_dist, inner_return_dist, running,分别为生物自身,领地位置(可以是具体坐标或一个函数),最大距离(超过此距离时,生物会停止走动,结束本轮的检测),返回距离(超过此距离时,生物会试图返回领地位置),返回时是否奔跑。这个节点实际生效的场景是这样的,生物追逐玩家跑出的领地的最大距离后,会先停在原地,然后等到下一次检测时,返回原本位置。 如果在游戏中仔细观察,就会注意到很多有领地的生物比如龙蝇,在追得太远时都会先停一下才返回。

LeashAndAvoid

绑定并躲避。和ChaseAndAttackAndAvoid类似,参数设置也相似,就是在Leash的基础上增加了躲避,同样也仅仅用于猪人守卫,不再赘述。

Panic

慌乱。这个动作执行时,生物会随机乱窜。

PanicAndAvoid

慌乱并躲避,和ChaseAndAttackAndAvoid类似,同样也仅仅用于猪人守卫,不再赘述。

RunAway

逃离。这个节点可以让生物远离特定目标(这里称为hunter),还可以回家。常见于兔子等生物。 节点参数如下 * inst: 生物自身 * hunterparams: hunter的相关参数如搜寻函数、标签等 * see_dist: 搜寻距离,当发现hunter小于此距离时,会逃跑 * safe_dist: 安全距离,开始逃跑后,当hunter大于此时,就会停下 * fn: 额外的判定fn,如果这个参数不为空,需要fn返回true才会逃跑 * runhome: 是否跑回家。 * fix_overhang: 如果参数为true,则会检测生物的位置,如果在海上会被移动到陆地

[已废弃]StalkerChaseAndAttack

一个过期的节点,官方推荐使用ChaseAndAttackAndAvoid替代

StandAndAttack

站在原地攻击。部分没有移动能力的生物,会使用这个节点而不是ChaseAndAttack。参数inst, findnewtargetfn,分别是生物自身,和寻找新目标的函数。第二个参数在官方的代码中并没有用到过。

StandStill

站在原地不动。参数inst, startfn, keepfn,分别是生物自身,开始这个动作的判定函数,保持这个动作的判定函数。这个动作节点很简单,就是让生物保持站在原地不动,如果startfn和keepfn为空,则不需要任何条件,只要行为树访问到这里,就会执行这个动作,保持不动。

UseShield

使用护盾防御。石虾在被攻击时经常会使用这个动作。参数inst, damageforshield, shieldtime, hidefromprojectiles, hidewhenscared,分别为生物自身,当自身收到伤害多少时开启护盾防御,防御持续时间,是否防御远程攻击,在受惊时是否防御。 这个节点制定了进入防御状态和退出防御状态的逻辑,实质上是触发了两个事件,分别是entershield和exitshield。如果你希望构建一种具备防御姿势的生物,可以考虑使用这个节点,并且为事件entershield和exitshield设置相应的回调函数(在官方代码中,是设置了相应的SG的EventHandler)

Wander

漫游。生物会在自己的家附近游荡。

参数说明

  • inst: 生物自身
  • homelocation: 家的位置,可以是具体的位置或者一个函数
  • max_dist: 最大游荡距离,生物与家的距离超过此距离时,就会往家里走
  • times: 这是一个times,分别有minwalktime,randwalktime,minwaittime,randwaittime四个子key,用于设置漫游中间的间隔时间,不需要填完全部参数,都不填也可以,都有默认设置的相应时间。
  • getdirectionFn: 获取返回的行走角度的函数,没有的时候就随机取一个角度
  • setdirectionFn: 修正返回行走角度的函数,没有的话就略过。
  • checkpointFn: 搜寻路径用的检测函数,有时用于绕过围墙。

getdirectionFn,setdirectionFn,checkpointFn这三个参数在实际的使用中较少用到,一般情况下可以忽略。

评论