NodeCanvas——行為樹節(jié)點(diǎn)介紹

1.Leafs(葉柄)

葉柄沒有子節(jié)點(diǎn)淫奔,位于樹的末端灶平。

Action(行為)

行為
  • 行為節(jié)點(diǎn)將執(zhí)行分配的動作任務(wù)蠢护⊙疟觯“行為”節(jié)點(diǎn)將返回“正在運(yùn)行”,直到“行為任務(wù)”完成時為止葵硕,此時它將根據(jù)分配的“行為任務(wù)”返回成功或失敗眉抬。NC附帶了各種不同的“行動任務(wù)”以供使用。

  • Success:成功完成分配的行為任務(wù)后

  • Failure:分配的行為任務(wù)完成失敗后

  • Running:分配的操作任務(wù)尚未完成時懈凹。

Condition(條件)

條件
  • 條件節(jié)點(diǎn)將執(zhí)行條件任務(wù)蜀变,并根據(jù)該條件任務(wù)返回成功或失敗。 NC附帶各種要使用的條件任務(wù)介评。
  • Success:如果分配的條件任務(wù)為真
  • Failure:如果分配的條件任務(wù)為假

2.Composites(復(fù)合行為)

Sequencer(序列)


Sequencer按從最高優(yōu)先級到最低優(yōu)先級(從左到右)的順序執(zhí)行其子節(jié)點(diǎn)库北。

  • 成功:當(dāng)所有子節(jié)點(diǎn)都成功完成
  • 失敗:當(dāng)任何子節(jié)點(diǎn)返回失敗時
  • 正在運(yùn)行:當(dāng)前正在執(zhí)行的子節(jié)點(diǎn)正在運(yùn)行時

Selector(選擇器)


Selector按從高到低的優(yōu)先級(從左到右)的順序執(zhí)行其子節(jié)點(diǎn)们陆。

  • 成功:當(dāng)任何子節(jié)點(diǎn)返回成功寒瓦。
  • 失敗:當(dāng)所有子節(jié)點(diǎn)都返回失敗時坪仇。
  • 正在運(yùn)行:當(dāng)前正在執(zhí)行的子節(jié)點(diǎn)正在運(yùn)行時杂腰。

Probability Selector(概率選擇器)

概率選擇器將根據(jù)被選擇的機(jī)會選擇并執(zhí)行子節(jié)點(diǎn)。如果該選定子級返回成功椅文,則概率選擇器還將返回成功颈墅。如果返回失敗,則將選擇一個新的子代雾袱。如果沒有孩子返回成功,則概率選擇器將返回失敗官还,或者如果引入了“失敗機(jī)會”芹橡,則可能立即返回失敗。

  • 成功:當(dāng)選定的子節(jié)點(diǎn)返回成功時望伦。
  • 失斄炙怠:選定的子節(jié)點(diǎn)返回失敗時煎殷,或者由于“失敗機(jī)會”而未選擇任何子節(jié)點(diǎn)。
  • 正在運(yùn)行:當(dāng)選定的子節(jié)點(diǎn)返回運(yùn)行時腿箩。

Priority Selector(優(yōu)先選擇器)

image

優(yōu)先級選擇器與普通選擇器相似豪直,但是將根據(jù)每個子級具有的優(yōu)先級來選擇子級執(zhí)行的順序。連接子節(jié)點(diǎn)后珠移,將顯示優(yōu)先權(quán)重弓乙,您可以直接或通過Blackboard變量進(jìn)行更改。

  • 成功: 第一個子節(jié)點(diǎn)返回成功時钧惧。
  • 失斚救汀:當(dāng)所有子節(jié)點(diǎn)都返回失敗時。
  • 正在運(yùn)行: 當(dāng)前子節(jié)點(diǎn)正在運(yùn)行浓瞪。

Parallel(并行)

image

并行將同時執(zhí)行其所有子級懈玻。可以將其設(shè)置為具有Sequencer或Selector的策略乾颁,如下所示:

如果設(shè)置為First Failure涂乌,則任何子代返回Failure后,并行將重置所有當(dāng)前的Running子代英岭,并返回Failure湾盒。否則,當(dāng)所有孩子都返回成功后巴席,它將返回成功历涝。

如果設(shè)置為First Success,則任何子級返回Success時漾唉,并行將重置所有當(dāng)前的Running子級荧库,并也返回Success。否則赵刑,當(dāng)所有孩子都返回失敗后分衫,它將返回失敗。

  • 成功:如果設(shè)置為“首次成功”般此,則任何孩子返回成功蚪战。如果設(shè)置為“首次失敗”,則當(dāng)所有孩子都成功完成時铐懊。
  • 失斞!:如果設(shè)置為“首次失敗”,則任何子級返回失敗時科乎。如果設(shè)置為“首次成功”壁畸,則所有子項(xiàng)均以失敗告終。
  • 正在運(yùn)行:任何孩子在跑步時。

Flip Selector(反轉(zhuǎn)選擇器)


翻轉(zhuǎn)選擇器的工作方式與普通選擇器類似捏萍,但是一旦子節(jié)點(diǎn)返回成功太抓,它就會移到末尾(右)。因此令杈,以前將始終先檢查失敗的孩子走敌,最近再檢查成功的孩子。

  • 成功: 當(dāng)子級返回成功時逗噩。
  • 失數衾觥: 當(dāng)所有子級都返回失敗時。
  • 正在運(yùn)行:當(dāng)前子級正在運(yùn)行给赞。

Switch(開關(guān))

Switch節(jié)點(diǎn)可以切換Enum或Integer值机打。根據(jù)當(dāng)前的Enum或整數(shù)值,它將執(zhí)行相應(yīng)的子節(jié)點(diǎn)片迅。如果另一個子節(jié)點(diǎn)先前在運(yùn)行残邀,它將被中斷。連接子節(jié)點(diǎn)后柑蛇,連接將讀取枚舉或整數(shù)值芥挣。

  • 成功:當(dāng)前子節(jié)點(diǎn)返回成功時。
  • 失敵芴ā:當(dāng)前子節(jié)點(diǎn)返回失敗空免,或者枚舉或整數(shù)值相對于連接的子節(jié)點(diǎn)數(shù)超出范圍。
  • 正在運(yùn)行:當(dāng)前子節(jié)點(diǎn)返回正在運(yùn)行盆耽。

Step Iterator(步驟迭代器)

步驟迭代器類似于選擇器蹋砚。如果子節(jié)點(diǎn)返回成功,則返回成功摄杂,如果所有子節(jié)點(diǎn)返回失敗坝咐,則返回失敗。唯一的區(qū)別是析恢,它會記住哪個子級返回成功墨坚,并從下一個子級開始下一次執(zhí)行,以便在下次再次執(zhí)行步驟迭代器時按順序進(jìn)行映挂。

  • 成功:子節(jié)點(diǎn)返回成功時泽篮。
  • 失敗:當(dāng)所有子節(jié)點(diǎn)都返回失敗時柑船。
  • 正在運(yùn)行:當(dāng)前子節(jié)點(diǎn)正在運(yùn)行時帽撑。

3.Decorators(裝飾節(jié)點(diǎn))

Interruptor(中斷節(jié)點(diǎn))

Interuptor被分配了條件任務(wù)。如果條件為真或變?yōu)檎姘笆保瑒t子節(jié)點(diǎn)將在運(yùn)行中被中斷油狂,并且中斷器將返回失敗。否則,中斷器將返回子節(jié)點(diǎn)返回的任何內(nèi)容专筷。

  • 成功:子節(jié)點(diǎn)返回成功時。
  • 失斦粑:子節(jié)點(diǎn)返回失敗時磷蛹,或者即使子節(jié)點(diǎn)正在運(yùn)行時,分配的條件為true或變?yōu)閠rue溪烤。(打斷了)味咳。
  • 正在運(yùn)行:子節(jié)點(diǎn)返回運(yùn)行時。

Conditional(條件節(jié)點(diǎn))

僅當(dāng)指定的條件為true時檬嘀,條件語句才會執(zhí)行其子節(jié)點(diǎn)槽驶,然后它將返回子節(jié)點(diǎn)返回的任何內(nèi)容。如果條件為假鸳兽,但子節(jié)點(diǎn)尚未運(yùn)行掂铐,它將返回失敗。因此揍异,換句話說全陨,如果條件即使成功了一幀,則子節(jié)點(diǎn)將執(zhí)行并且即使條件不再成立也不會被中斷衷掷。

  • 成功:子節(jié)點(diǎn)返回成功時辱姨。
  • 失敗:子節(jié)點(diǎn)返回失敗戚嗅,或者條件為false且子節(jié)點(diǎn)尚未運(yùn)行時雨涛。
  • 運(yùn)行:子節(jié)點(diǎn)返回運(yùn)行時。

Inverter(逆變器)

逆變器會將其子節(jié)點(diǎn)的成功和失敗返回狀態(tài)重新映射為相反的狀態(tài)懦胞。 成功:將子節(jié)點(diǎn)重新映射到成功時替久。

  • 成功:子節(jié)點(diǎn)返回失敗時。
  • 失斠教薄:子節(jié)點(diǎn)返回成功時侣肄。
  • 正在運(yùn)行:子節(jié)點(diǎn)正在運(yùn)行時。

Repeater(中繼器)


Repeater會重復(fù)其子級Number次醇份,或者直到它返回指定的狀態(tài)稼锅,或者Forever。

  • 成功:如果為“Repeat Times(重復(fù)次數(shù))”僚纷,則子節(jié)點(diǎn)在最后一次重復(fù)時返回成功矩距。如果為“Repeat Until(重復(fù)直到)”,則子節(jié)點(diǎn)返回成功且所需狀態(tài)為成功時怖竭。
  • 失斪墩:如果為“Repeat Times(重復(fù)次數(shù))”,則子節(jié)點(diǎn)在最后一次重復(fù)時返回失敗。如果為“Repeat Until(重復(fù)直到)”哮肚,則子節(jié)點(diǎn)返回失敗且所需狀態(tài)為失敗時登夫。
  • 運(yùn)行:只要重復(fù)。

Filter(過濾器)

按特定的Numbers次數(shù)或每特定的時間量(例如Cooldown)過濾對其子節(jié)點(diǎn)的訪問允趟。默認(rèn)情況下恼策,如果將其過濾,則關(guān)于其父節(jié)點(diǎn)潮剪,該節(jié)點(diǎn)將被視為“不活動”涣楷。取消選擇此選項(xiàng)將返回失敗。

  • 成功:訪問子節(jié)點(diǎn)并返回成功時抗碰。
  • 失斒ǘ贰:訪問子節(jié)點(diǎn)并返回失敗時,或“受限時不活動”被關(guān)閉弧蝇。
  • 正在運(yùn)行:訪問子節(jié)點(diǎn)并返回運(yùn)行碳褒。

Iterator(迭代器)


迭代器將迭代從黑板獲取的列表。在每次迭代中捍壤,將使用提供的名稱將當(dāng)前迭代的元素保存在同一黑板上骤视,并將執(zhí)行子節(jié)點(diǎn)。

可以選擇將Iterator設(shè)置為在裝飾的節(jié)點(diǎn)返回成功或失敗后立即終止迭代鹃觉。如果未設(shè)置任何終止條件(NONE)专酗,或者如果列表已被迭代且不滿足終止條件,則Iterator將返回上一次返回的迭代子執(zhí)行的結(jié)果盗扇。

如果選中了“重置索引”祷肯,則迭代器將在重置時將當(dāng)前迭代的索引重置為零,否則該索引將保留疗隶,除非它是列表的最后一個索引佑笋。將其視為“for each”。

  • 成功:當(dāng)列表被迭代并且子節(jié)點(diǎn)返回成功時斑鼻,或者如果設(shè)置為“First Success(首次成功)”蒋纬,則子節(jié)點(diǎn)首次返回成功。
  • 失敿崛酢:迭代列表并且子節(jié)點(diǎn)返回失敗蜀备,或者如果設(shè)置為“‘First Failure(首次失敗)”荒叶,則子節(jié)點(diǎn)首次返回失敗碾阁。
  • 運(yùn)行:只要迭代就可以了。

Timeout(暫停節(jié)點(diǎn))

如果子節(jié)點(diǎn)的運(yùn)行時間超過以秒為單位指定的時間些楣,則超時裝飾器將中斷子節(jié)點(diǎn)“運(yùn)行”脂凶。否則宪睹,它將返回子節(jié)點(diǎn)返回的任何內(nèi)容。

  • 成功:當(dāng)子級返回成功時蚕钦。
  • 失斖げ :當(dāng)子級返回失敗或超時時。
  • 正在運(yùn)行:子級返回跑步時嘶居。

Wait Until(等待命贴,直到)

Wait Until將返回運(yùn)行,直到分配的條件任務(wù)變?yōu)檎媸程H绻谧蛹壉还催x后條件變?yōu)榧伲鼘⒉粫袛嗨垡稹H當(dāng)孩子尚未運(yùn)行時才檢查該條件樱报。

成功:當(dāng)子級返回成功時。
失斉⒌薄:當(dāng)子級返回失敗時迹蛤。
正在運(yùn)行:當(dāng)子級返回正在運(yùn)行或條件為假時。

Optional(可選結(jié)果)

Optional Decorator在執(zhí)行裝飾的子節(jié)點(diǎn)時不考慮其成功或失敗返回狀態(tài)襟士,因此就預(yù)期狀態(tài)而言盗飒,它對于父節(jié)點(diǎn)是可選的。

  • 成功:永遠(yuǎn)不會陋桂。
  • 失斈嫒ぁ:從不。
  • 正在運(yùn)行:子節(jié)點(diǎn)正在運(yùn)行時嗜历。

Guard(守護(hù))

如果具有相同指定令牌的另一個Guard已經(jīng)在保護(hù)(運(yùn)行)該令牌宣渗,??則防止裝飾的子級運(yùn)行。對于為同一代理運(yùn)行的所有行為樹梨州,保護(hù)是全局的痕囱。

受保護(hù)時,可以將其設(shè)置為返回失敗或正在運(yùn)行暴匠。

  • 成功:當(dāng)子級返回成功時鞍恢。
  • 失敗:當(dāng)子級返回失敗或保護(hù)處于活動狀態(tài)并設(shè)置為受保護(hù)時返回失敗每窖。
  • 正在運(yùn)行:當(dāng)子級返回運(yùn)行或受保護(hù)時處于活動狀態(tài)帮掉,并設(shè)置為在受保護(hù)時返回運(yùn)行。

Override Agent(替代代理)

Override Agent將為行為樹的其余部分以及直接從Blackboard變量中選擇或獲取的游戲?qū)ο笤O(shè)置另一個Agent岛请。這意味著該裝飾器下面的每個節(jié)點(diǎn)現(xiàn)在都會被該新代理選中旭寿。此裝飾器是NodeCanvas允許您從單個“主”行為樹控制多個代理或動態(tài)更改代理的方式之一。

  • 成功:子節(jié)點(diǎn)返回成功時崇败。
  • 失斨殉啤:子節(jié)點(diǎn)返回失敗時肩祥。
  • 運(yùn)行:子節(jié)點(diǎn)返回運(yùn)行時。

4.Sub-Behaviours(子行為)

SubTree(行為樹)

子樹是整個其他行為樹缩膝。SubTree節(jié)點(diǎn)將返回分配的行為樹的根節(jié)點(diǎn)(“開始”)返回的任何內(nèi)容混狠。根行為樹的代理和黑板將向下傳遞到子樹,因此所有可用的黑板變量將相同疾层,并且也可用于子樹将饺。

成功:當(dāng)SubTree的根節(jié)點(diǎn)返回成功時。
失斖蠢琛:當(dāng)SubTree的根節(jié)點(diǎn)返回失敗時予弧。
正在運(yùn)行:當(dāng)SubTree的根節(jié)點(diǎn)返回“正在運(yùn)行”時。

NestedFSM(狀態(tài)機(jī))

可以為嵌套的FSM分配整個FSM湖饱。執(zhí)行后掖蛤,F(xiàn)SM將啟動。只要FSM正在運(yùn)行井厌,NestedFSM節(jié)點(diǎn)將返回“正在運(yùn)行”蚓庭。您可以為成功指定FSM的一種狀態(tài),為失敗指定另一種狀態(tài)仅仆。一旦嵌套的FSM進(jìn)入任何一種狀態(tài)器赞,F(xiàn)SM將停止,并且該節(jié)點(diǎn)將相應(yīng)地返回成功或失敗墓拜。否則港柜,當(dāng)嵌套的FSM完成時,它將返回成功撮弧。此行為樹的代理和黑板將傳遞給嵌套FSM潘懊,因此根行為樹的所有可用變量也將相同,并且可用于嵌套FSM贿衍。

成功:當(dāng)嵌套FSM進(jìn)入選定的成功狀態(tài)時授舟,或嵌套FSM完成時。
失斆潮病:嵌套的FSM進(jìn)入選定的失敗狀態(tài)時释树。
運(yùn)行:只要嵌套FSM正在運(yùn)行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末擎淤,一起剝皮案震驚了整個濱河市奢啥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嘴拢,老刑警劉巖桩盲,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異席吴,居然都是意外死亡赌结,警方通過查閱死者的電腦和手機(jī)捞蛋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柬姚,“玉大人拟杉,你說我怎么就攤上這事×砍校” “怎么了搬设?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長撕捍。 經(jīng)常有香客問我拿穴,道長,這世上最難降的妖魔是什么忧风? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任贞言,我火速辦了婚禮,結(jié)果婚禮上阀蒂,老公的妹妹穿的比我還像新娘。我一直安慰自己弟蚀,他們只是感情好蚤霞,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著义钉,像睡著了一般昧绣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捶闸,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天夜畴,我揣著相機(jī)與錄音,去河邊找鬼删壮。 笑死层宫,一個胖子當(dāng)著我的面吹牛仗哨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼峦筒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了俄烁?” 一聲冷哼從身側(cè)響起它呀,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洛勉,沒想到半個月后粘秆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡收毫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年攻走,在試婚紗的時候發(fā)現(xiàn)自己被綠了殷勘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡陋气,死狀恐怖劳吠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情巩趁,我是刑警寧澤痒玩,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站议慰,受9級特大地震影響蠢古,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜别凹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一草讶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炉菲,春花似錦堕战、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽越驻。三九已至,卻和暖如春缀旁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背并巍。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留履澳,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓距贷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親忠蝗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • feisky云計(jì)算阁最、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,827評論 0 5
  • 由于文章太長,簡書放不下速种,完整文檔見Consul文檔。 一配阵、安裝 Consul Consul 的安裝很簡單,安裝 ...
    FlySheep_ly閱讀 10,095評論 1 13
  • 前言 在游戲開發(fā)中實(shí)現(xiàn)怪物AI邏輯的主要技術(shù)有兩種:1棋傍、狀態(tài)機(jī)2、行為樹瘫拣。 他們兩者的實(shí)現(xiàn)機(jī)制不一樣亿絮,其中狀態(tài)機(jī)是...
    爐石不傳說閱讀 6,252評論 0 6
  • PlayMaker是什么? PlayMaker是Unity3D的一款 可視化 的 有限元狀態(tài)機(jī)(Finite-st...
    shimmery閱讀 39,497評論 5 68
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時麸拄,會觸發(fā)此異常派昧。 O...
    我想起個好名字閱讀 5,249評論 0 9