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)先選擇器)
優(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(并行)
并行將同時執(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)行。