{"id":4086,"date":"2024-03-30T00:25:40","date_gmt":"2024-03-29T16:25:40","guid":{"rendered":"https:\/\/lonelinerd.com\/?p=4086"},"modified":"2024-03-30T01:01:07","modified_gmt":"2024-03-29T17:01:07","slug":"ue5_ai_bt_composite_node","status":"publish","type":"post","link":"https:\/\/lonelinerd.com\/index.php\/2024\/03\/30\/ue5_ai_bt_composite_node\/","title":{"rendered":"[C++\/UE] UE5\u4e2dAI\u958b\u767c\u7684\u4e00\u9ede\u529f\u80fd\u68b3\u7406\uff08\u4e8c\uff09 &#8211; \u884c\u70ba\u6a39Composite\u985e\u578b\u7bc0\u9ede\u8aaa\u660e"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"4086\" class=\"elementor elementor-4086\">\n\t\t\t\t\t\t<div class=\"elementor-inner\">\n\t\t\t\t<div class=\"elementor-section-wrap\">\n\t\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-ddedca2 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"ddedca2\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1a3a8da\" data-id=\"1a3a8da\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f97d3d7 elementor-widget elementor-widget-text-editor\" data-id=\"f97d3d7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<h3><span style=\"text-decoration: underline;\"><strong>\u884c\u70ba\u6a39Composite\u7bc0\u9ede\u8aaa\u660e<\/strong><\/span><\/h3>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c8db53b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c8db53b\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e5fa37a\" data-id=\"e5fa37a\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-631a484 elementor-widget elementor-widget-image\" data-id=\"631a484\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-image\">\n\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"553\" height=\"239\" src=\"https:\/\/lonelinerd.com\/wp-content\/uploads\/2024\/03\/CreateCompositeNode.png\" class=\"attachment-large size-large wp-image-4090\" alt=\"\" srcset=\"https:\/\/lonelinerd.com\/wp-content\/uploads\/2024\/03\/CreateCompositeNode.png 553w, https:\/\/lonelinerd.com\/wp-content\/uploads\/2024\/03\/CreateCompositeNode-300x130.png 300w\" sizes=\"auto, (max-width: 553px) 100vw, 553px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3456e6d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3456e6d\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5d84eb6\" data-id=\"5d84eb6\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c04a97e elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"c04a97e\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d1e239a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d1e239a\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-fa950ac\" data-id=\"fa950ac\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d886fe3 elementor-widget elementor-widget-text-editor\" data-id=\"d886fe3\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<h4><span style=\"text-decoration: underline;\"><strong>Selector<\/strong><\/span><\/h4>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c276233 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c276233\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1514429\" data-id=\"1514429\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7a28dc4 elementor-widget elementor-widget-image\" data-id=\"7a28dc4\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-image\">\n\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"526\" height=\"326\" src=\"https:\/\/lonelinerd.com\/wp-content\/uploads\/2024\/03\/SelectorNode.png\" class=\"attachment-large size-large wp-image-4091\" alt=\"\" srcset=\"https:\/\/lonelinerd.com\/wp-content\/uploads\/2024\/03\/SelectorNode.png 526w, https:\/\/lonelinerd.com\/wp-content\/uploads\/2024\/03\/SelectorNode-300x186.png 300w\" sizes=\"auto, (max-width: 526px) 100vw, 526px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e60eb06 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e60eb06\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d053c33\" data-id=\"d053c33\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f519537 elementor-widget elementor-widget-code-block-for-elementor\" data-id=\"f519537\" data-element_type=\"widget\" data-widget_type=\"code-block-for-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<pre class='line-numbers theme-okaidia' data-show-toolbar='yes'><code class='language-cpp'>\/\/BTComposite_Selector.cpp\r\n\/** \r\n * Selector composite node.\r\n * Selector Nodes execute their children from left to right, and will stop executing its children when one of their children succeeds.\r\n * If a Selector's child succeeds, the Selector succeeds. If all the Selector's children fail, the Selector fails.\r\n *\/\r\nint32 UBTComposite_Selector::GetNextChildHandler(FBehaviorTreeSearchData&amp; SearchData, int32 PrevChild, EBTNodeResult::Type LastResult) const\r\n{\r\n    \/\/ success = quit\r\n    int32 NextChildIdx = BTSpecialChild::ReturnToParent;\r\n\r\n    if (PrevChild == BTSpecialChild::NotInitialized)\r\n    {\r\n        \/\/ newly activated: start from first\r\n        NextChildIdx = 0;\r\n    }\r\n    else if (LastResult == EBTNodeResult::Failed &amp;&amp; (PrevChild + 1) &lt; GetChildrenNum())\r\n    {\r\n        \/\/ failed = choose next child\r\n        NextChildIdx = PrevChild + 1;\r\n    }\r\n\r\n    return NextChildIdx;\r\n}\r\n<\/code><\/pre>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7fa9d4a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7fa9d4a\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9537b07\" data-id=\"9537b07\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a281fae elementor-widget elementor-widget-text-editor\" data-id=\"a281fae\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<ul><li>\u5982Selector\u6709\u7bc0\u9edeA\uff08BTTask_Patrol\uff09\u8ddf\u7bc0\u9edeB\uff08BTTask_MoveRandomLocation\uff09\uff0c\u5982\u679c\u7bc0\u9edeA\u8fd4\u56deSucceeded\uff0c\u5247Selector\u6703\u99ac\u4e0a\u8fd4\u56deSucceeded\uff0c\u4e0d\u6703\u57f7\u884c\u7bc0\u9edeB\u7684\u884c\u70ba<\/li><li>\u63db\u8a00\u4e4b\u5c31\u662f\u5728\u7b2c\u4e00\u500b\u5b50\u7bc0\u9ede\u8fd4\u56deSucceeded\u6642\uff0cSelector\u4e5f\u8fd4\u56de\uff0c\u5426\u5247\u6703\u4e00\u76f4\u57f7\u884c\uff0c\u76f4\u5230\u6240\u6709\u7bc0\u9ede\u90fd\u8fd4\u56deFailed\u6642\uff0c\u81ea\u8eab\uff08Selector\uff09\u8fd4\u56deFailed<\/li><\/ul>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-fd4e103 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"fd4e103\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-063636b\" data-id=\"063636b\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-23ed4e6 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"23ed4e6\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-37201e2 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"37201e2\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-465f18a\" data-id=\"465f18a\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d2eb42d elementor-widget elementor-widget-text-editor\" data-id=\"d2eb42d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<h4><strong><u>Sequence<\/u><\/strong><\/h4>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9c304d8 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9c304d8\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f433257\" data-id=\"f433257\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d51750f elementor-widget elementor-widget-image\" data-id=\"d51750f\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-image\">\n\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"553\" height=\"298\" src=\"https:\/\/lonelinerd.com\/wp-content\/uploads\/2024\/03\/SequenceNode.png\" class=\"attachment-large size-large wp-image-4092\" alt=\"\" srcset=\"https:\/\/lonelinerd.com\/wp-content\/uploads\/2024\/03\/SequenceNode.png 553w, https:\/\/lonelinerd.com\/wp-content\/uploads\/2024\/03\/SequenceNode-300x162.png 300w\" sizes=\"auto, (max-width: 553px) 100vw, 553px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-177a029 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"177a029\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e867a5c\" data-id=\"e867a5c\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a7f4c21 elementor-widget elementor-widget-code-block-for-elementor\" data-id=\"a7f4c21\" data-element_type=\"widget\" data-widget_type=\"code-block-for-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<pre class='line-numbers theme-okaidia' data-show-toolbar='yes'><code class='language-cpp'>\/\/BTComposite_Sequence.cpp\r\n\/**\r\n * Sequence composite node.\r\n * Sequence Nodes execute their children from left to right, and will stop executing its children when one of their children fails.\r\n * If a child fails, then the Sequence fails. If all the Sequence's children succeed, then the Sequence succeeds.\r\n *\/\r\nint32 UBTComposite_Sequence::GetNextChildHandler(FBehaviorTreeSearchData&amp; SearchData, int32 PrevChild, EBTNodeResult::Type LastResult) const\r\n{\r\n    \/\/ failure = quit\r\n    int32 NextChildIdx = BTSpecialChild::ReturnToParent;\r\n\r\n    if (PrevChild == BTSpecialChild::NotInitialized)\r\n    {\r\n        \/\/ newly activated: start from first\r\n        NextChildIdx = 0;\r\n    }\r\n    else if (LastResult == EBTNodeResult::Succeeded &amp;&amp; (PrevChild + 1) &lt; GetChildrenNum())\r\n    {\r\n        \/\/ success = choose next child\r\n        NextChildIdx = PrevChild + 1;\r\n    }\r\n\r\n    return NextChildIdx;\r\n}\r\n<\/code><\/pre>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9399337 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9399337\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-768b1a2\" data-id=\"768b1a2\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-aa885ea elementor-widget elementor-widget-text-editor\" data-id=\"aa885ea\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<ul><li>\u57fa\u672c\u662fSelector\u7684\u76f8\u53cd<\/li><li>\u5982Sequence\u6709\u4e0a\u8ff0\u4e09\u500b\u7bc0\u9ede\uff0c\u5f9e\u5de6\u81f3\u53f3\u5206\u5225\u70ba\uff08A\u3001B\u3001C\uff09\uff0c\u5982\u679c\u7bc0\u9edeA\u8fd4\u56deFailed\uff0c\u5247Sequence\u6703\u99ac\u4e0a\u8fd4\u56deFailed\uff0c\u4e0d\u6703\u57f7\u884c\u7bc0\u9edeB\u53caC\u7684\u884c\u70ba<\/li><li>\u63db\u8a00\u4e4b\u5c31\u662f\u5728\u7b2c\u4e00\u500b\u5b50\u7bc0\u9ede\u8fd4\u56deFailed\u6642\uff0cSequence\u4e5f\u8fd4\u56de\uff0c\u5426\u5247\u6703\u4e00\u76f4\u57f7\u884c\uff0c\u76f4\u5230\u6240\u6709\u7bc0\u9ede\u90fd\u8fd4\u56deSucceeded\u6642\uff0c\u81ea\u8eab\uff08Sequence\uff09\u8fd4\u56deSucceeded<\/li><\/ul>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a9c5724 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a9c5724\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d212b1a\" data-id=\"d212b1a\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-357088c elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"357088c\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7b375c4 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7b375c4\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0c7d408\" data-id=\"0c7d408\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1795fcc elementor-widget elementor-widget-text-editor\" data-id=\"1795fcc\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<h4><strong><u>Simple Parallel<\/u><\/strong><\/h4>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d62db34 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d62db34\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d32fbe2\" data-id=\"d32fbe2\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7aac8ca elementor-widget elementor-widget-image\" data-id=\"7aac8ca\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-image\">\n\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"553\" height=\"304\" src=\"https:\/\/lonelinerd.com\/wp-content\/uploads\/2024\/03\/SimpleParallelNode.png\" class=\"attachment-large size-large wp-image-4101\" alt=\"\" srcset=\"https:\/\/lonelinerd.com\/wp-content\/uploads\/2024\/03\/SimpleParallelNode.png 553w, https:\/\/lonelinerd.com\/wp-content\/uploads\/2024\/03\/SimpleParallelNode-300x165.png 300w\" sizes=\"auto, (max-width: 553px) 100vw, 553px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-85cc698 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"85cc698\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-74bd1e4\" data-id=\"74bd1e4\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bd22977 elementor-widget elementor-widget-text-editor\" data-id=\"bd22977\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<ul><li>\u4e3b\u4efb\u52d9\u5fc5\u9808\u70ba\u4e00\u500b\u55ae\u7368\u7684Task\u7bc0\u9ede<\/li><li>\u526f\u4efb\u52d9\u5247\u53ef\u4ee5\u662f\u4e00\u500bSequence\u6216\u8005\u5176\u4ed6\u7d44\u5408\u7bc0\u9ede<\/li><li>FinishMode<ul><li>Immediate =&gt; \u7576Main Task\u57f7\u884c\u5b8c\u6210\uff0c\u99ac\u4e0a\u6253\u65b7background tree\u4e26\u8fd4\u56de<\/li><li>Delayed =&gt; Main Task\u57f7\u884c\u5b8c\u6210\uff0c\u7b49\u5f85background tree\u4e5f\u57f7\u884c\u5b8c\u6210\u624d\u8fd4\u56de<\/li><\/ul><\/li><\/ul>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a3a9167 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a3a9167\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b029615\" data-id=\"b029615\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e1eda8b elementor-widget elementor-widget-code-block-for-elementor\" data-id=\"e1eda8b\" data-element_type=\"widget\" data-widget_type=\"code-block-for-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<pre class='line-numbers theme-okaidia' data-show-toolbar='yes'><code class='language-cpp'>\/\/BTComposite_SimpleParallel.cpp\r\n\/**\r\n * Simple Parallel composite node.\r\n * Allows for running two children: one which must be a single task node (with optional decorators), and the other of which can be a complete subtree.\r\n *\/\r\nint32 UBTComposite_SimpleParallel::GetNextChildHandler(FBehaviorTreeSearchData&amp; SearchData, int32 PrevChild, EBTNodeResult::Type LastResult) const\r\n{\r\n    FBTParallelMemory* MyMemory = GetNodeMemory&lt;FBTParallelMemory&gt;(SearchData);\r\n    int32 NextChildIdx = BTSpecialChild::ReturnToParent;\r\n\r\n    if (PrevChild == BTSpecialChild::NotInitialized)\r\n    {\r\n        NextChildIdx = EBTParallelChild::MainTask;\r\n        MyMemory-&gt;MainTaskResult = EBTNodeResult::Failed;\r\n        MyMemory-&gt;bRepeatMainTask = false;\r\n    }\r\n    else if ((MyMemory-&gt;bMainTaskIsActive || MyMemory-&gt;bForceBackgroundTree) &amp;&amp; !SearchData.OwnerComp.IsRestartPending())\r\n    {\r\n        \/\/ if main task is running - always pick background tree\r\n        \/\/ unless search is from abort from background tree - return to parent (and break from search when node gets deactivated)\r\n        NextChildIdx = EBTParallelChild::BackgroundTree;\r\n        MyMemory-&gt;bForceBackgroundTree = false;\r\n    }\r\n    else if (MyMemory-&gt;bRepeatMainTask)\r\n    {\r\n        UE_VLOG(SearchData.OwnerComp.GetOwner(), LogBehaviorTree, Verbose, TEXT(&quot;Repeating main task of %s&quot;), *UBehaviorTreeTypes::DescribeNodeHelper(this));\r\n        NextChildIdx = EBTParallelChild::MainTask;\r\n        MyMemory-&gt;bRepeatMainTask = false;\r\n    }\r\n\r\n    if ((PrevChild == NextChildIdx) &amp;&amp; (MyMemory-&gt;LastSearchId == SearchData.SearchId))\r\n    {\r\n        \/\/ retrying the same branch again within the same search - possible infinite loop\r\n        SearchData.bPostponeSearch = true;\r\n    }\r\n\r\n    MyMemory-&gt;LastSearchId = SearchData.SearchId;\r\n    return NextChildIdx;\r\n}\r\n\r\nvoid UBTComposite_SimpleParallel::NotifyChildExecution(UBehaviorTreeComponent&amp; OwnerComp, uint8* NodeMemory, int32 ChildIdx, EBTNodeResult::Type&amp; NodeResult) const\r\n{\r\n    FBTParallelMemory* MyMemory = (FBTParallelMemory*)NodeMemory;\r\n    if (ChildIdx == EBTParallelChild::MainTask)\r\n    {\r\n        MyMemory-&gt;MainTaskResult = NodeResult;\r\n\r\n        if (NodeResult == EBTNodeResult::InProgress)\r\n        {\r\n            EBTTaskStatus::Type Status = OwnerComp.GetTaskStatus(Children[EBTParallelChild::MainTask].ChildTask);\r\n            if (Status == EBTTaskStatus::Active)\r\n            {\r\n                \/\/ can't register if task is currently being aborted (latent abort returns in progress)\r\n\r\n                MyMemory-&gt;bMainTaskIsActive = true;\r\n                MyMemory-&gt;bForceBackgroundTree = false;\r\n                \r\n                OwnerComp.RegisterParallelTask(Children[EBTParallelChild::MainTask].ChildTask);\r\n                RequestDelayedExecution(OwnerComp, EBTNodeResult::Succeeded);\r\n            }\r\n        }\r\n        else if (MyMemory-&gt;bMainTaskIsActive)\r\n        {\r\n            MyMemory-&gt;bMainTaskIsActive = false;\r\n            \r\n            \/\/ notify decorators on main task, ignore observers updates in FakeSearchData - they are not allowed by parallel composite\r\n            FBehaviorTreeSearchData FakeSearchData(OwnerComp);\r\n            NotifyDecoratorsOnDeactivation(FakeSearchData, ChildIdx, NodeResult, true \/*bIsRequestInSameInstance*\/);\r\n\r\n            const int32 MyInstanceIdx = OwnerComp.FindInstanceContainingNode(this);\r\n\r\n            \/\/ use check() here not IntCastChecked() as MyInstanceIdx can be INDEX_NONE!\r\n            check(MyInstanceIdx &lt; MAX_uint16);\r\n            OwnerComp.UnregisterParallelTask(Children[EBTParallelChild::MainTask].ChildTask, static_cast&lt;uint16&gt;(MyInstanceIdx));\r\n            if (NodeResult != EBTNodeResult::Aborted &amp;&amp; !MyMemory-&gt;bRepeatMainTask)\r\n            {\r\n                \/\/ check if subtree should be aborted when task finished with success\/failed result\r\n                if (FinishMode == EBTParallelMode::AbortBackground)\r\n                {\r\n                    OwnerComp.RequestExecution((UBTCompositeNode*)this, MyInstanceIdx,\r\n                        Children[EBTParallelChild::MainTask].ChildTask, EBTParallelChild::MainTask,\r\n                        NodeResult);\r\n                }\r\n            }\r\n        }\r\n        else if (NodeResult == EBTNodeResult::Succeeded &amp;&amp; FinishMode == EBTParallelMode::WaitForBackground)\r\n        {\r\n            \/\/ special case: if main task finished instantly, but composite is supposed to wait for background tree,\r\n            \/\/ request single run of background tree anyway\r\n\r\n            MyMemory-&gt;bForceBackgroundTree = true;\r\n\r\n            RequestDelayedExecution(OwnerComp, EBTNodeResult::Succeeded);\r\n        }\r\n    }\r\n}\r\n\r\nvoid UBTComposite_SimpleParallel::NotifyNodeDeactivation(FBehaviorTreeSearchData&amp; SearchData, EBTNodeResult::Type&amp; NodeResult) const\r\n{\r\n    FBTParallelMemory* MyMemory = GetNodeMemory&lt;FBTParallelMemory&gt;(SearchData);\r\n    const uint16 ActiveInstanceIdx = SearchData.OwnerComp.GetActiveInstanceIdx();\r\n\r\n    \/\/ modify node result if main task has finished\r\n    if (!MyMemory-&gt;bMainTaskIsActive)\r\n    {\r\n        NodeResult = MyMemory-&gt;MainTaskResult;\r\n    }\r\n\r\n    \/\/ remove main task\r\n    if (Children.IsValidIndex(EBTParallelChild::MainTask))\r\n    {\r\n        SearchData.AddUniqueUpdate(FBehaviorTreeSearchUpdate(Children[EBTParallelChild::MainTask].ChildTask, ActiveInstanceIdx, EBTNodeUpdateMode::Remove));\r\n    }\r\n}\r\n<\/code><\/pre>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a26c5e4 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a26c5e4\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-38da86f\" data-id=\"38da86f\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2e9f89b elementor-widget elementor-widget-text-editor\" data-id=\"2e9f89b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<ul><li>\u9996\u6b21\u9032\u5165Simple Parallel\u6642\uff0c\u6703\u9078\u4e2dMain Task\u7bc0\u9ede\u4e26\u958b\u59cb\u57f7\u884c\uff1b\u800c\u7576Main Task\u958b\u59cb\u57f7\u884c\u5f8c\uff0cSimple Parallel\u5c31\u6703\u6301\u7e8c\u9078\u4e2dbackground tree\u7684\u7bc0\u9ede\u4e26\u57f7\u884c<ul><li>Main Task\u57f7\u884c\u5b8c\u6210\u5f8c\uff0cSimple Parallel\u7bc0\u9ede\u6703\u6536\u5230\u901a\u77e5\uff0c\u7136\u5f8cSimple Parallel\u6703\u5224\u65b7\uff1a<ul><li>Main Task\u57f7\u884c\u9014\u4e2d\u88ab\u6253\u65b7<ul><li>\u6a19\u8a18mainTaskIsActive\uff08main task is running\uff09\u70bafalse<\/li><li>\u628aMain Task\u5f9e\u5e76\u884c\u57f7\u884c\u5217\u8868\u4e2d\u53d6\u6d88\u6ce8\u518a<\/li><li>\u5982\u679cFinish Mode\u70ba AbortBackground\uff08\u7acb\u5373\u6253\u65b7\uff09\uff0c\u99ac\u4e0a\u767c\u51fa\u4e00\u6b21\u57f7\u884cMain Task\u7bc0\u9ede\u7684\u8acb\u6c42\uff0c\u5b8c\u6210\u5f8c\u6703\u91cd\u65b0\u5617\u8a66GetNextChild\uff0c\u4f46\u662f\u7531\u65bcmainTaskIsActive\u548cforceBackgroundTree\u90fd\u70bafalse\uff0c\u56e0\u6b64\u6574\u652f\u7bc0\u9ede\u76f4\u63a5\u8fd4\u56de<\/li><\/ul><\/li><li>Main Task\u57f7\u884c\u6210\u529f\u4e14Finish Mode\u8a2d\u70baDelayed\uff08FinishMode == WaitForBackground\uff09<ul><li>\u6a19\u8a18\u9700\u8981\u7b49forceBackgroundTree\uff08\u662f\u5426\u5ef6\u9072\u5b8c\u6210\uff09\u70batrue\uff0c\u4f7fParallel\u5728GetNextChildHandler\u6642\uff0c\u5373\u4f7fMain Task\u5df2\u7d93\u57f7\u884c\u5b8c\u7562\uff0c\u4ecd\u7136\u6703\u7372\u53d6\u5230Background Task\u4f5c\u70ba\u4e0b\u500b\u57f7\u884c\u7684\u7bc0\u9ede<\/li><\/ul><\/li><li>\u6700\u5f8c\u8fd4\u56deMain Task\u7684\u8fd4\u56de\u7d50\u679c<\/li><\/ul><\/li><\/ul><\/li><li>\u76ee\u524d\u5b98\u65b9\u66f4\u63a8\u85a6\u4f7f\u7528Services\u7bc0\u9ede\u53d6\u4ee3Simple Parallel\u4f86\u505a\u5e76\u884c<\/li><\/ul>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b0c2e22 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b0c2e22\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d383129\" data-id=\"d383129\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ff59c9c elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"ff59c9c\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u672c\u7bc7\u70baUE AI\u7cfb\u5217\u7684\u7b2c\u4e8c\u90e8\u5206\uff1a\u884c\u70ba\u6a39Composite\u985e\u578b\u7bc0\u9ede\u8aaa\u660e<\/p>\n","protected":false},"author":1,"featured_media":4068,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,17],"tags":[],"class_list":["post-4086","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming-notes","category-devnotes"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/lonelinerd.com\/wp-content\/uploads\/2024\/03\/FeatureCover_Unreal5ArtificialIntelligence.png","_links":{"self":[{"href":"https:\/\/lonelinerd.com\/index.php\/wp-json\/wp\/v2\/posts\/4086","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lonelinerd.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lonelinerd.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lonelinerd.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lonelinerd.com\/index.php\/wp-json\/wp\/v2\/comments?post=4086"}],"version-history":[{"count":12,"href":"https:\/\/lonelinerd.com\/index.php\/wp-json\/wp\/v2\/posts\/4086\/revisions"}],"predecessor-version":[{"id":4110,"href":"https:\/\/lonelinerd.com\/index.php\/wp-json\/wp\/v2\/posts\/4086\/revisions\/4110"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lonelinerd.com\/index.php\/wp-json\/wp\/v2\/media\/4068"}],"wp:attachment":[{"href":"https:\/\/lonelinerd.com\/index.php\/wp-json\/wp\/v2\/media?parent=4086"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lonelinerd.com\/index.php\/wp-json\/wp\/v2\/categories?post=4086"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lonelinerd.com\/index.php\/wp-json\/wp\/v2\/tags?post=4086"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}