{"id":249,"date":"2024-04-11T21:16:58","date_gmt":"2024-04-11T13:16:58","guid":{"rendered":"https:\/\/www.vanforever.com.cn\/?p=249"},"modified":"2024-10-08T22:53:00","modified_gmt":"2024-10-08T14:53:00","slug":"ue-ai%e5%ad%a6%e4%b9%a0%e4%b9%8b%e8%b7%af","status":"publish","type":"post","link":"https:\/\/www.vanforever.com.cn\/?p=249","title":{"rendered":"UE AI\u5b66\u4e60\u4e4b\u8def"},"content":{"rendered":"<div  class='collapse-block shadow-sm collapse-block-transparent collapsed hide-border-left'><div class='collapse-block-title'><span class='collapse-block-title-inner'>\u7279\u8272\u56fe\u7247\u67e5\u770b<\/span><i class='collapse-icon fa fa-angle-down'><\/i><\/div><div class='collapse-block-body' style='display:none;'><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/Vanforever\/20240325\/call-of-duty-modern-warfare-3-3840x2160-call-of-duty-modern-warfare-3-25059.jpeg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large\" data-original=\"https:\/\/pic.vanforever.com.cn\/Vanforever\/20240325\/call-of-duty-modern-warfare-3-3840x2160-call-of-duty-modern-warfare-3-25059.jpeg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" width=\"3840\" height=\"2160\" \/><\/div><\/div><\/div>\n<h1 id=\"ue-ai\u5b66\u4e60\u4e4b\u8def\">UE AI\u5b66\u4e60\u4e4b\u8def<\/h1>\n<h2 id=\"\u884c\u4e3a\u6811\u5b66\u4e60\">\u884c\u4e3a\u6811\u5b66\u4e60<\/h2>\n<h3 id=\"\u884c\u4e3a\u6811\u7b80\u4ecb\">\u884c\u4e3a\u6811\u7b80\u4ecb<\/h3>\n<p>\u884c\u4e3a\u6811\u63a7\u5236\u7740\u6e38\u620f\u4e2dAI\u7684\u884c\u4e3a\uff0c\u53ef\u4ee5\u770b\u6210AI\u7684\u5927\u8111\u3002\u5b83\u662f\u4e00\u4e2a\u81ea\u4e0a\u800c\u4e0b\u8fd0\u884c\u7684\u7ed3\u6784\uff0c\u4ece\u6839\u8282\u70b9\u5f00\u59cb\u5411\u4e0b\u4e00\u76f4\u5230\u8fbe\u4efb\u52a1\u8282\u70b9\u3002\u4e2d\u95f4\u6709\u4e00\u4e9b\u6539\u53d8\u6267\u884c\u8def\u5f84\u7684\u5206\u652f\u8282\u70b9.<\/p>\n<h3 id=\"bots\u884c\u4e3a\u4e0e\u79fb\u52a8\">Bots\u884c\u4e3a\u4e0e\u79fb\u52a8<\/h3>\n<ol start=\"\">\n<li>\u521b\u5efa\u65b0\u7684\u7c7bSAICharacter,SAIController<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240325\/2024032501.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240325\/2024032501.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240325\/2024032502.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240325\/2024032502.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"2\">\n<li>\u521b\u5efaAI\u6587\u4ef6\u5939,\u65b0\u5efaSAICharacter\u84dd\u56fe<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240325\/2024032503.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240325\/2024032503.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"3\">\n<li>\u4e3a\u84dd\u56fe\u9009\u62e9Mesh,\u8bbe\u7f6e\u52a8\u753b<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240325\/2024032504.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240325\/2024032504.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240325\/2024032505.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240325\/2024032505.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"4\">\n<li>\u4fee\u6539\u84dd\u56fe,\u4f7f\u52a8\u753b\u6b63\u5e38\u8fd0\u884c(\u56e0\u4e3a\u6211\u4eec\u662f\u4ece\u522b\u7684\u5730\u65b9\u62ff\u7684\u8d44\u4ea7,\u7f3a\u5c11\u76f8\u5173\u7684\u7c7b)<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240325\/2024032506.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240325\/2024032506.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"5\">\n<li>\u5c06\u8d44\u4ea7\u653e\u5165\u573a\u666f<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041101.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041101.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"6\">\n<li>\u5728Volumes\u91cc\u9762\u9009\u62e9Nav Mesh Bounds Volume<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041102.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041102.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041103.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041103.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"7\">\n<li>\u5728AI\u4e2d\u9009\u62e9Behavior Tree \u548c Blackboard<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041104.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041104.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041105.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041105.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>8.\u5728Behavior Tree\u4e2d\u4e3aROOT\u9009\u62e9Blackboard Asset\uff0c\u4e0e\u6211\u4eec\u5efa\u7acb\u7684Blackboard\u7ed1\u5b9a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041106.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041106.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"9\">\n<li>\u5728Blackboard\u4e2d\u521b\u5efaKey-\u9009\u62e9Vector<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041107.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041107.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"10\">\n<li>\u5b8c\u5584Behavior Tree<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041108.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041108.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"11\">\n<li>\u4fee\u6539C++\u4ee3\u7801,\u4ee5SAIController\u4e3a\u57fa\u7c7b\u521b\u5efa\u84dd\u56fe<\/li>\n<\/ol>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SAIController.h\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"AIController.h\"\n#include \"SAIController.generated.h\"\n\n\nclass UBehaviorTree;\n\n\/**\n * \n *\/\nUCLASS()\nclass ACTIONROGUELIKE_API ASAIController : public AAIController\n{\n\tGENERATED_BODY()\n\nprotected:\n\n\tUPROPERTY(EditDefaultsOnly,Category = \"AI\")\n\tUBehaviorTree* BehaviorTree;\n\t\n\tvirtual void BeginPlay() override;\n};\n\n\n<\/code><\/pre>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SAIController.cpp\n#include \"AI\/SAIController.h\"\n\n#include \"BehaviorTree\/BlackboardComponent.h\"\n#include \"Kismet\/GameplayStatics.h\"\n\nvoid ASAIController::BeginPlay()\n{\n\tSuper::BeginPlay();\n\n\tRunBehaviorTree(BehaviorTree);\n\n\tAPawn* MyPawn =  UGameplayStatics::GetPlayerPawn(this,0);\n\tif(MyPawn != nullptr)\n\t{\n\t\t\/\/\u4f7fAI\u79fb\u52a8\u81f3\u89d2\u8272\u521d\u59cb\u4f4d\u7f6e\n\t\tGetBlackboardComponent()-&gt;SetValueAsVector(\"MoveToLocation\",MyPawn-&gt;GetActorLocation());\n\n\t\t\/\/\u4f7fAI\u79fb\u52a8\u81f3\u89d2\u8272\u5f53\u524d\u4f4d\u7f6e\n\t\tGetBlackboardComponent()-&gt;SetValueAsObject(\"TargetActor\",MyPawn);\n\n\t\t\n\t}\n}\n\n<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041109.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041109.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"12\">\n<li>\u5c06\u84dd\u56fe\u4e0eBehavior Tree\u7ed1\u5b9a,\u4fee\u6539AI Controller Class<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041110.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041110.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041111.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041111.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041112.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240411\/2024041112.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<h3 id=\"\u653b\u51fb\u8303\u56f4\u68c0\u6d4b\">\u653b\u51fb\u8303\u56f4\u68c0\u6d4b<\/h3>\n<ol start=\"\">\n<li>\u521b\u5efa\u65b0C++\u7c7b,\u4ee5BTService\u4e3a\u57fa\u7c7b<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240412\/2024041201.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240412\/2024041201.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SBTService_CheckAttackRange.h\n\/\/ Fill out your copyright notice in the Description page of Project Settings.\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"BehaviorTree\/BTService.h\"\n#include \"SBTService_CheckAttackRange.generated.h\"\n\n\/**\n * \n *\/\nUCLASS()\nclass ACTIONROGUELIKE_API USBTService_CheckAttackRange : public UBTService\n{\n\tGENERATED_BODY()\n\nprotected:\n\n\tUPROPERTY(EditAnywhere,Category=\"AI\")\n\tFBlackboardKeySelector AttackRangeKey;\n\t\n\tvirtual void TickNode(UBehaviorTreeComponent&amp; OwnerComp, uint8* NodeMemory, float DeltaSeconds) override;\n\n};\n\n<\/code><\/pre>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SBTService_CheckAttackRange.cpp\n\/\/ Fill out your copyright notice in the Description page of Project Settings.\n\n\n#include \"AI\/SBTService_CheckAttackRange.h\"\n\n#include \"AIController.h\"\n#include \"BehaviorTree\/BlackboardComponent.h\"\n\nvoid USBTService_CheckAttackRange::TickNode(UBehaviorTreeComponent&amp; OwnerComp, uint8* NodeMemory, float DeltaSeconds)\n{\n\tSuper::TickNode(OwnerComp, NodeMemory, DeltaSeconds);\n\n\t\/\/Check distance between ai pawn and target actor\n\n\tUBlackboardComponent* BlackboardComp = OwnerComp.GetBlackboardComponent();\n\tif(ensure(BlackboardComp))\n\t{\n\t\tAActor* TargetActor = Cast&lt;AActor&gt;(BlackboardComp-&gt;GetValueAsObject(\"TargetActor\"));\n\t\tif(TargetActor)\n\t\t{\n\t\t\tAAIController* MyController =  OwnerComp.GetAIOwner();\n\t\t\tif(ensure(MyController))\n\t\t\t{\n\t\t\t\tAPawn* AIPawn =  MyController-&gt;GetPawn();\n\t\t\t\tif(ensure(AIPawn))\n\t\t\t\t{\n\t\t\t\t\tfloat DistanceTo = FVector::Distance(TargetActor-&gt;GetActorLocation(),AIPawn-&gt;GetActorLocation());\n\n\t\t\t\t\tbool bWithinRange = DistanceTo &lt; 2000.0f;\n\n\t\t\t\t\t\/*bool bHasLOS = false;\n\t\t\t\t\tif(bWithinRange)\n\t\t\t\t\t{\n\t\t\t\t\t\tbHasLOS =  MyController-&gt;LineOfSightTo(TargetActor);\n\t\t\t\t\t}*\/\n\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\tBlackboardComp-&gt;SetValueAsBool(AttackRangeKey.SelectedKeyName,(bWithinRange \/*&amp;&amp; bHasLOS*\/));\n\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\/\/\u672a\u53bb\u6389\u6ce8\u91ca\u7684\u4ee3\u7801\u5b9e\u73b0,NPC\u81ea\u52a8\u5bfb\u627e\u73a9\u5bb6,\u5982\u679c\u8303\u56f4\u5c0f\u4e8e2000.0f\u5219\u7ee7\u7eed\u5bfb\u627e,\u5426\u5219\u539f\u5730\u505c\u6b62\n\/\/\u53bb\u6389\u4e0a\u8ff0\u4ee3\u7801\u4e2d\u7684\u6ce8\u91ca\uff0c\u4e0a\u8ff0\u4ee3\u7801\u5b9e\u73b0Bot\u5982\u679c\u65e0\u6cd5\u770b\u5230\u73a9\u5bb6,\u5c31\u81ea\u52a8\u5bfb\u627e\u8def\u5f84\u76f4\u5230\u80fd\u591f\u53d1\u73b0\u73a9\u5bb6\n<\/code><\/pre>\n<ol start=\"2\">\n<li>\u6253\u5f00Blackboard,\u521b\u5efa\u65b0Key\uff0c\u7c7b\u578b\u4e3abool,<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240412\/2024041202.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240412\/2024041202.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"3\">\n<li>\u6253\u5f00Behavior Tree,\u4fee\u6539Sequence,\u4ee5\u53caMove To Player<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240412\/2024041203.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240412\/2024041203.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240412\/2024041204.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240412\/2024041204.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240412\/2024041205.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240412\/2024041205.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"4\">\n<li>\u4fee\u6539\u6dfb\u52a0\u7684Decorator,\u56fe\u4e2d\u4f8b\u5b50\u610f\u5473\u7740\u5f53\u4e0d\u5728\u653b\u51fb\u8303\u56f4\u65f6,\u4f1a\u6267\u884c\u60c5\u51b5<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240412\/2024041206.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240412\/2024041206.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"5\">\n<li>\u6dfb\u52a0Selector<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240412\/2024041207.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240412\/2024041207.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>6.\u6700\u7ec8\u6210\u679c\u5982\u4e0b<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240412\/2024041208.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240412\/2024041208.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<h3 id=\"\u4f7fbot\u6839\u636e\u8303\u56f4\u8fdb\u884c\u653b\u51fb\">\u4f7fBot\u6839\u636e\u8303\u56f4\u8fdb\u884c\u653b\u51fb<\/h3>\n<ol start=\"\">\n<li>\u521b\u5efa\u65b0\u7684\u7c7b<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240419\/2024041901.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240419\/2024041901.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"2\">\n<li>\u5728C++\u4e2d\u5b8c\u6210\u4e0b\u5217\u4ee3\u7801<\/li>\n<\/ol>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SBTTask_RangedTask.cpp\n\/\/ Fill out your copyright notice in the Description page of Project Settings.\n\n\n#include \"AI\/SBTTask_RangedTask.h\"\n\n#include \"AIController.h\"\n#include \"BehaviorTree\/BlackboardComponent.h\"\n#include \"GameFramework\/Character.h\"\n\nEBTNodeResult::Type USBTTask_RangedTask::ExecuteTask(UBehaviorTreeComponent&amp; OwnerComp, uint8* NodeMemory)\n{\n\tAAIController* MyController = OwnerComp.GetAIOwner();\n\tif(ensure(MyController))\n\t{\n\t\tACharacter* MyPawn = Cast&lt;ACharacter&gt;(MyController-&gt;GetPawn());\n\t\tif(MyPawn == nullptr)\n\t\t{\n\t\t\treturn EBTNodeResult::Failed;\n\t\t}\n\n\t\tFVector MuzzleLocation = MyPawn-&gt;GetMesh()-&gt;GetSocketLocation(\"Muzzle_01\");\n\n\t\tAActor* TargetActor = Cast&lt;AActor&gt;(OwnerComp.GetBlackboardComponent()-&gt;GetValueAsObject(\"TargetActor\"));\n\t\tif(TargetActor == nullptr)\n\t\t{\n\t\t\treturn EBTNodeResult::Failed;\n\n\t\t}\n\n\t\tFVector Direction = TargetActor-&gt;GetActorLocation() - MuzzleLocation;\n\t\tFRotator MuzzleRotation = Direction.Rotation();\n\n\t\tFActorSpawnParameters Params;\n\t\tParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;\n\n\t\tAActor* NewProj = GetWorld()-&gt;SpawnActor&lt;AActor&gt;(ProjectileClass,MuzzleLocation,MuzzleRotation,Params);\n\t\treturn NewProj ? EBTNodeResult::Succeeded : EBTNodeResult::Failed;\n\t}\n\n\t\n\t\n\treturn EBTNodeResult::Failed;\n}\n\n<\/code><\/pre>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SBTTask_RangedTask.h\n\/\/ Fill out your copyright notice in the Description page of Project Settings.\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"BehaviorTree\/BTTaskNode.h\"\n#include \"SBTTask_RangedTask.generated.h\"\n\n\/**\n * \n *\/\nUCLASS()\nclass ACTIONROGUELIKE_API USBTTask_RangedTask : public UBTTaskNode\n{\n\tGENERATED_BODY()\n\n\n\tvirtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent&amp; OwnerComp, uint8* NodeMemory) override;\n\n\nprotected:\n\n\tUPROPERTY(EditAnywhere,Category=\"AI\")\n\tTSubclassOf&lt;AActor&gt; ProjectileClass;\n};\n\n<\/code><\/pre>\n<ol start=\"3\">\n<li>\u5728BT Tree\u4e2d\u5982\u4e0b\u52fe\u9009,\u53d1\u73b0Bot\u653b\u51fb\u6ca1\u6709\u95f4\u9694<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240419\/2024041902.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240419\/2024041902.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240419\/2024041903.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240419\/2024041903.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"4\">\n<li>\u6dfb\u52a0Cooldown\u6dfb\u52a0\u653b\u51fb\u95f4\u9694,\u8bbe\u7f6eLoop\u5b9e\u73b0\u4e09\u8fde\u51fb<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240419\/2024041904.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240419\/2024041904.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240419\/2024041905.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240419\/2024041905.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"5\">\n<li>\u884c\u4e3a\u6811\u89c2\u5bdf\u4e2d\u65ad\u64cd\u4f5c(\u6ca1\u6709\u6210\u529f\u5b9e\u73b0,\u76ee\u524d\u4e0d\u77e5\u9053\u539f\u56e0)<\/li>\n<\/ol>\n<p>2024\/5\/9\u66f4\u65b0 \u5c06CoolDown\u7684Observer aborts\u8bbe\u7f6e\u4e3aLower Priority\u5373\u53ef\u89e3\u51b3<\/p>\n<p>2024\/5\/14\u66f4\u65b0 ,\u5176\u5b9e\u6839\u636e\u4e0b\u9762\u7684\u56fe\u7247\u4e2d\u7684\u84dd\u56fe\u91cd\u65b0\u4fee\u6539\u540e\u5c31\u53ef\u5b8c\u6210\u6548\u679c,\u8fd9\u91cc\u4e0d\u6210\u529f\u662f\u56e0\u4e3a\u548c\u6559\u7a0b\u4e2d\u9009\u62e9Blackboard Key\u8fd8\u662f\u4e0d\u4e00\u6837<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240419\/2024041906.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240419\/2024041906.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"6\">\n<li>\u4f7f\u5f97Bot\u5728\u653b\u51fb\u65f6\u7126\u70b9\u805a\u96c6\u4e8e\u73a9\u5bb6\u8eab\u4e0a,\u6211\u4eec\u7684Default Focus\u9009\u62e9\u7684TargetActor\uff0c\u4e5f\u5c31\u662fBot\u7784\u51c6\u7684\u4f4d\u7f6e<div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240419\/2024041907.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240419\/2024041907.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/li>\n<\/ol>\n<h3 id=\"\u8ba9ai\u66f4\u806a\u660e\u7684\u79fb\u52a8\">\u8ba9AI\u66f4\u806a\u660e\u7684\u79fb\u52a8<\/h3>\n<ol start=\"\">\n<li>\u521b\u5efaEnvironment Query<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050801.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050801.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u6309\u7167\u4e0b\u56fe\u6dfb\u52a0<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050802.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050802.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"2\">\n<li>\u5728Behavior Tree\u4e2d\u6dfb\u52a0RunEQSQuery<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050803.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050803.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"3\">\n<li>\u4fee\u6539Filter \u786e\u5b9a\u6700\u5c0f\u8303\u56f4<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050804.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050804.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"4\">\n<li>\u521b\u5efa\u84dd\u56fe<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050805.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050805.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u5728\u84dd\u56fe\u4e2d\u521b\u5efa\u51fd\u6570 ProvideSingleActor<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050806.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050806.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050808.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050808.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"5\">\n<li>\u901a\u8fc7\u4fee\u6539\u5982\u56fe\u6240\u6307,\u53ef\u4ee5\u5b9e\u73b0\u5f71\u54cdai\u7684\u8def\u5f84<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050807.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050807.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"6\">\n<li>\u7ee7\u7eed\u4fee\u6539<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050809.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050809.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050810.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050810.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"7\">\n<li>\u4f7f\u7528\u5f00\u53d1\u8005\u5de5\u5177\u4e2d\u7684 Visual Logger<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050811.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050811.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"8\">\n<li>ai\u5224\u65ad\u5f97\u5206\u7684\u6807\u51c6<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050812.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050812.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050813.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050813.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"9\">\n<li>\u4fee\u6539\u4e00\u4e0b<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050814.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050814.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050815.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240508\/2024050815.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<h3 id=\"\u4e3aai\u52a0\u4e0a\u611f\u6d4b\u7cfb\u7edf\">\u4e3aAI\u52a0\u4e0a\u611f\u6d4b\u7cfb\u7edf<\/h3>\n<ol start=\"\">\n<li>\u4fee\u6539\u4e0b\u5217\u4ee3\u7801<\/li>\n<\/ol>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/ SAICharacter.h\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"GameFramework\/Character.h\"\n#include \"SAICharacter.generated.h\"\n\n\nclass UPawnSensingComponent;\n\nUCLASS()\nclass ACTIONROGUELIKE_API ASAICharacter : public ACharacter\n{\n\tGENERATED_BODY()\n\npublic:\n\tASAICharacter();\n\nprotected:\n\n\t\n\n\tvirtual void PostInitializeComponents() override;\n\n\tUPROPERTY(VisibleAnywhere,Category=\"Components\")\n\tUPawnSensingComponent* PawnSensingComp;\n\t\n\n\tUFUNCTION()\n\tvoid OnPawnSeen(APawn* Pawn);\n};\n \n<\/code><\/pre>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/ SAICharacter.cpp\n\n\n#include \"AI\/SAICharacter.h\"\n\n#include \"AIController.h\"\n#include \"BehaviorTree\/BlackboardComponent.h\"\n#include \"Perception\/PawnSensingComponent.h\"\n\n\n\/\/ Sets default values\nASAICharacter::ASAICharacter()\n{\n \tPawnSensingComp =  CreateDefaultSubobject&lt;UPawnSensingComponent&gt;(\"PawnSensingComp\");\n\n}\n\nvoid ASAICharacter::PostInitializeComponents()\n{\n\tSuper::PostInitializeComponents();\n\tPawnSensingComp-&gt;OnSeePawn.AddDynamic(this,&amp;ASAICharacter::OnPawnSeen);\n}\n\nvoid ASAICharacter::OnPawnSeen(APawn* Pawn)\n{\n\tAAIController* AIC = Cast&lt;AAIController&gt;(GetController());\n\tif(AIC)\n\t{\n\t\tUBlackboardComponent* BBComp =  AIC-&gt;GetBlackboardComponent();\n\n\t\tBBComp-&gt;SetValueAsObject(\"TargetActor\",Pawn);\n\n\t\tDrawDebugString(GetWorld(),GetActorLocation(),\"PlayerSpotted\",nullptr,FColor::White,4.0f,true);\n\n\t\t\n\t}\n}\n\n<\/code><\/pre>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/ \u6ce8\u91ca\u6389SAIController.cpp\u4e2d\u7684\u90e8\u5206\u4ee3\u7801,\u8fd9\u91cc\u539f\u672c\u662f\u4e3a\u4e4b\u524dai\u5bfb\u627e\u76ee\u6807\u5b9e\u73b0\u7684,\u73b0\u5728\u8981\u8ba9ai\u611f\u77e5player\u7684\u4f4d\u7f6e,\u8fd9\u90e8\u5206\u4e0d\u9700\u8981\u4e86\n\n\n#include \"AI\/SAIController.h\"\n\n#include \"BehaviorTree\/BlackboardComponent.h\"\n#include \"Kismet\/GameplayStatics.h\"\n\nvoid ASAIController::BeginPlay()\n{\n\tSuper::BeginPlay();\n\n\tRunBehaviorTree(BehaviorTree);\n\n\t\/*APawn* MyPawn =  UGameplayStatics::GetPlayerPawn(this,0);\n\tif(MyPawn != nullptr)\n\t{\n\t\t\/\/\u4f7fAI\u79fb\u52a8\u81f3\u89d2\u8272\u521d\u59cb\u4f4d\u7f6e\n\t\tGetBlackboardComponent()-&gt;SetValueAsVector(\"MoveToLocation\",MyPawn-&gt;GetActorLocation());\n\n\t\t\/\/\u4f7fAI\u79fb\u52a8\u81f3\u89d2\u8272\u5f53\u524d\u4f4d\u7f6e\n\t\tGetBlackboardComponent()-&gt;SetValueAsObject(\"TargetActor\",MyPawn);\n\n\t\t\n\t}*\/\n\t\/\/\u4e0a\u9762\u6ce8\u91ca\u7684\u4ee3\u7801\u5df2\u7ecf\u4e0d\u9700\u8981\u4e86\n\n\t\n}\n\n<\/code><\/pre>\n<ol start=\"2\">\n<li>\u67e5\u770b\u6211\u4eec\u8bbe\u8ba1\u7684Character,\u53ef\u4ee5\u770b\u5230\u7eff\u7ebf\u662fai\u7684\u68c0\u6d4b\u8303\u56f4<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240516\/2024051601.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240516\/2024051601.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240516\/2024051602.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240516\/2024051602.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<ol start=\"3\">\n<li>\u4fee\u6539\u84dd\u56fe,\u544a\u77e5ai\u89d2\u8272\u7684\u4f4d\u7f6e<\/li>\n<\/ol>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240516\/2024051603.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240516\/2024051603.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<h3 id=\"\u6539\u5584bots\u52a8\u753b\">\u6539\u5584Bots\u52a8\u753b<\/h3>\n<p>\u901a\u8fc7\u4e0a\u4e00\u6b65,\u6211\u4eec\u4ecd\u7136\u53d1\u73b0bots\u7684\u6b65\u4f10\u5728\u4f1a\u5728\u5230\u8fbe\u6307\u5b9a\u4f4d\u7f6e\u65f6\u5361\u987f,\u73b0\u5728\u6211\u4eec\u8981\u4f7f\u52a8\u753b\u66f4\u52a0\u987a\u6ed1<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240516\/2024051604.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240516\/2024051604.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240516\/2024051605.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240516\/2024051605.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u6dfb\u52a0\u4ee3\u7801<\/p>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SAIController.cpp\n\nif(ensureMsgf(BehaviorTree,TEXT(\"Behavior Tree is a nullptr! Please assign BehaviorTree in Your AI Controller.\")))\n\t{\n\t\tRunBehaviorTree(BehaviorTree);\n\n\t}\n<\/code><\/pre>\n<p>\u5f53\u884c\u4e3a\u6811\u672a\u90e8\u7f72\u65f6,\u4f1a\u4e3b\u52a8\u63d0\u793a,\u4f46\u662f\u5728\u5b8c\u6210\u8fc7\u7a0b\u4e2d\u5e76\u672a\u53d1\u73b0\u63d0\u793a<\/p>\n<h3 id=\"\u5bfb\u627e\u673a\u5668\u4eba\u51fa\u751f\u70b9\">\u5bfb\u627e\u673a\u5668\u4eba\u51fa\u751f\u70b9<\/h3>\n<p>\u65b0\u5efaeqs<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072801.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072801.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u9009\u62e9\u57fa\u7840\u84dd\u56fe<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072802.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072802.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u5728overvide\u51fd\u6570\u4e2d\u9009\u62e9Actor Set\u91cd\u6784<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072803.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072803.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u4fee\u6539\u4e2d\u5fc3center<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072804.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072804.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u65b0\u5efa\u84dd\u56fe\uff0c\u8fdb\u884ceqs Testing<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072805.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072805.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u663e\u793abot \u751f\u6210\u4f4d\u7f6e<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072806.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072806.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072807.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072807.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u6dfb\u52a0Distance Test\u68c0\u6d4b\u8ddd\u79bb\u4e0a\u662f\u5426\u5b58\u5728\u4e0d\u80fd\u901a\u8fc7\u7684\u4f4d\u7f6e<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072808.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072808.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u5728\u8fd9\u91cc\u6211\u4eec\u5f88\u5e78\u8fd0\uff0c\u6ca1\u6709\u9047\u5230\u70b9\u7684\u4f4d\u7f6e\u51fa\u73b0\u5728\u63a9\u4f53\u5185\uff0c\u4e0d\u8fc7\u6211\u4eec\u8fd8\u662f\u8981\u8003\u8651\u8fd9\u4e2a\u95ee\u9898<\/p>\n<p>\u663e\u793aNavigation<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072809.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072809.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u6211\u4eec\u5728Volume\u4e2d\u627e\u5230\u8fd9\u4e2aNav Modifier Volume<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072810.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072810.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u7136\u540e\u5728WireFrame\u6a21\u5f0f\u4e0b\uff0c\u5c06Nav\u90e8\u5206\u6d88\u9664<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072811.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072811.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u6dfb\u52a0PathFinding Test,\u68c0\u6d4b\u9053\u8def\u662f\u5426\u5b58\u5728,\u8fd9\u6837\u505a\u4f1a\u589e\u5927\u5f00\u9500\uff0c\u4f46\u662f\u80fd\u907f\u514d\u8def\u5f84\u51fa\u73b0\u5728\u6b7b\u70b9\u7684\u60c5\u51b5\u3002<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072812.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072812.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<h3 id=\"\u81ea\u5b9a\u4e49gamemode\u53ca\u5b9e\u73b0bots\u751f\u6210\">\u81ea\u5b9a\u4e49GameMode\u53ca\u5b9e\u73b0Bots\u751f\u6210<\/h3>\n<p>\u521b\u5efa\u65b0\u7684\u7c7bGameModeBase,\u5728\u8fd9\u91cc\u6211\u4eec\u53ef\u4ee5\u5b9a\u4e49\u5c5e\u4e8e\u81ea\u5df1\u7684\u6e38\u620f\u89c4\u5219<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072813.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072813.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SAICharacter.cpp\nASAICharacter::ASAICharacter()\n{\n \tPawnSensingComp =  CreateDefaultSubobject&lt;UPawnSensingComponent&gt;(\"PawnSensingComp\");\n\n\tAutoPossessAI = EAutoPossessAI::PlacedInWorldOrSpawned;\n}\n\n\/\/SGameModeBase.h\n\/\/ Fill out your copyright notice in the Description page of Project Settings.\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"GameFramework\/GameModeBase.h\"\n#include \"EnvironmentQuery\/EnvQueryTypes.h\"\n#include \"SGameModeBase.generated.h\"\n\nclass UEnvQuery;\nclass UEnvQueryInstanceBlueprintWrapper;\nclass UCurveFloat;\n\n\/**\n * \n *\/\nUCLASS()\nclass ACTIONROGUELIKE_API ASGameModeBase : public AGameModeBase\n{\n\tGENERATED_BODY()\n\nprotected:\n\n\tUPROPERTY(EditDefaultsOnly, Category = \"AI\")\n\tTSubclassOf&lt;AActor&gt; MinionClass;\n\n\tUPROPERTY(EditDefaultsOnly, Category = \"AI\")\n\tUEnvQuery* SpawnBotQuery;\n\n\tUPROPERTY(EditDefaultsOnly, Category = \"AI\")\n\tUCurveFloat* DifficultyCurve;\n\n\tFTimerHandle TimerHandle_SpawnBots;\n\n\tUPROPERTY(EditDefaultsOnly, Category = \"AI\")\n\tfloat SpawnTimerInterval;\n\n\tUFUNCTION()\n\tvoid SpawnBotTimerElapsed();\n\n\tUFUNCTION()\n\tvoid OnQueryCompleted(UEnvQueryInstanceBlueprintWrapper* QueryInstance, EEnvQueryStatus::Type QueryStatus);\n\npublic:\n\n\tASGameModeBase();\n\n\tvirtual void StartPlay() override;\n};\n\n\n\/\/\/\/SGameModeBase.cpp\n\/\/ Fill out your copyright notice in the Description page of Project Settings.\n\n\n#include \"SGameModeBase.h\"\n#include \"EnvironmentQuery\/EnvQueryManager.h\"\n#include \"EnvironmentQuery\/EnvQueryTypes.h\"\n#include \"EnvironmentQuery\/EnvQueryInstanceBlueprintWrapper.h\"\n#include \"AI\/SAICharacter.h\"\n#include \"SAttributeComponent.h\"\n#include \"EngineUtils.h\"\n\n\n\n \n\nASGameModeBase::ASGameModeBase()\n{\n\tSpawnTimerInterval = 2.0f;\n}\n\n\nvoid ASGameModeBase::StartPlay()\n{\n\tSuper::StartPlay();\n\n\t\/\/ Continuous timer to spawn in more bots.\n\t\/\/ Actual amount of bots and whether its allowed to spawn determined by spawn logic later in the chain...\n\tGetWorldTimerManager().SetTimer(TimerHandle_SpawnBots, this, &amp;ASGameModeBase::SpawnBotTimerElapsed, SpawnTimerInterval, true);\n}\n\n\nvoid ASGameModeBase::SpawnBotTimerElapsed()\n{\n\tUEnvQueryInstanceBlueprintWrapper* QueryInstance = UEnvQueryManager::RunEQSQuery(this, SpawnBotQuery, this, EEnvQueryRunMode::RandomBest5Pct, nullptr);\n\tif (ensure(QueryInstance))\n\t{\n\t\tQueryInstance-&gt;GetOnQueryFinishedEvent().AddDynamic(this, &amp;ASGameModeBase::OnQueryCompleted);\n\t}\n}\n\n\nvoid ASGameModeBase::OnQueryCompleted(UEnvQueryInstanceBlueprintWrapper* QueryInstance, EEnvQueryStatus::Type QueryStatus)\n{\n\tif (QueryStatus != EEnvQueryStatus::Success)\n\t{\n\t\tUE_LOG(LogTemp, Warning, TEXT(\"Spawn bot EQS Query Failed!\"));\n\t\treturn;\n\t}\n\n\n\tint32 NrOfAliveBots = 0;\n\tfor (TActorIterator&lt;ASAICharacter&gt; It(GetWorld()); It; ++It)\n\t{\n\t\tASAICharacter* Bot = *It;\n\n\t\tUSAttributeComponent* AttributeComp = Cast&lt;USAttributeComponent&gt;(Bot-&gt;GetComponentByClass(USAttributeComponent::StaticClass()));\n\t\tif (ensure(AttributeComp) &amp;&amp; AttributeComp-&gt;IsAlive())\n\t\t{\n\t\t\tNrOfAliveBots++;\n\t\t}\n\t}\n\n\tfloat MaxBotCount = 10.0f;\n\n\tif (DifficultyCurve)\n\t{\n\t\tMaxBotCount = DifficultyCurve-&gt;GetFloatValue(GetWorld()-&gt;TimeSeconds);\n\t}\n\n\n\tif (NrOfAliveBots &gt;= MaxBotCount)\n\t{\n\t\treturn;\n\t}\n\n\n\n\tTArray&lt;FVector&gt; Locations = QueryInstance-&gt;GetResultsAsLocations();\n\n\tif (Locations.IsValidIndex(0))\n\t{\n\n\t\tGetWorld()-&gt;SpawnActor&lt;AActor&gt;(MinionClass, Locations[0], FRotator::ZeroRotator);\n\t}\n}\n\n<\/code><\/pre>\n<p>\u65b0\u5efa\u4e00\u4e2a\u4ee5SGameMode\u4e3a\u57fa\u7c7b\u7684\u84dd\u56fe\uff0c\u8bbe\u7f6eMinionClass\u548ceqs<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072814.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072814.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u5728\u4e16\u754c\u8bbe\u8ba1GameMode\u4e3aGameModeBP<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072815.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072815.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u521b\u5efa\u96be\u5ea6\u66f2\u7ebf,\u9009\u62e9CurveFloat<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072816.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072816.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u5728Curve\u4e2d \u57280s\u65f6\uff0c\u53ea\u5141\u8bb8\u5b58\u5728\u4e00\u4e2a\u654c\u4eba\uff0c\u523060\u79d2\u540e\uff0c\u6700\u591a\u5b58\u572810\u4e2a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072817.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240728\/2024072817.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<h3 id=\"\u589e\u52a0\u4f24\u5bb3\u6b7b\u4ea1\u5e03\u5a03\u5a03\u529f\u80fd\">\u589e\u52a0\u4f24\u5bb3\uff0c\u6b7b\u4ea1\uff0c\u5e03\u5a03\u5a03\u529f\u80fd<\/h3>\n<p>\u6211\u4eec\u8981\u65b0\u589e\u4e09\u4e2a\u65b0\u529f\u80fd\uff0c\u5bf9Bots\u9020\u6210\u4f24\u5bb3\uff0c\u4f7fbots\u6b7b\u4ea1\u5e76\u4e14\u5448\u73b0\u5e03\u5a03\u5a03\u7684\u72b6\u6001<\/p>\n<p>\u9996\u5148\u65b0\u589e\u4ee3\u7801<\/p>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SAICharacter.h\nprotected:\nUPROPERTY(VisibleAnywhere,BlueprintReadOnly,Category=\"Components\")\n\tUSAttributeComponent* AttributeComp;\n\nUFUNCTION()\n\tvoid OnHealthChanged(AActor* InstigatorActor, USAttributeComponent* OwningComp, float NewHealth,float Delta);\n\n\/\/SAICharacter.cpp\nASAICharacter::ASAICharacter()\n{\n\tAttributeComp = CreateDefaultSubobject&lt;USAttributeComponent&gt;(\"AttributeComp\");\n}\n\nvoid ASAICharacter::PostInitializeComponents()\n{\n\tAttributeComp-&gt;OnHealthChanged.AddDynamic(this,&amp;ASAICharacter::OnHealthChanged);\n}\n\nvoid ASAICharacter::OnHealthChanged(AActor* InstigatorActor, USAttributeComponent* OwningComp, float NewHealth,\n\tfloat Delta)\n{\n\tif(Delta &lt;0.0f)\n\t{\n\n\n\t\tif(NewHealth &lt;= 0.0f)\n\t\t{\n\t\t\t\/\/stop BT\n\t\t\tAAIController* AIC =  Cast&lt;AAIController&gt;(GetController());\n\t\t\tif(AIC )\n\t\t\t{\n\t\t\t\tAIC-&gt;GetBrainComponent()-&gt;StopLogic(\"Killed\");\n\t\t\t}\n\n\t\t\t\/\/ragdoll\n\t\t\tGetMesh()-&gt;SetAllBodiesSimulatePhysics(true);\n\t\t\t\n\n\t\t\t\/\/set lifespan\n\t\t\tSetLifeSpan(10.0f);\n\t\t}\n\t}\n}\n\n\/\/SGameModeBase.cpp \n\/\/\u4ec5\u4ec5\u6dfb\u52a0\u4e00\u4e9b\u8c03\u8bd5\u7684\u5185\u5bb9\nvoid ASGameModeBase::OnQueryCompleted(UEnvQueryInstanceBlueprintWrapper* QueryInstance, EEnvQueryStatus::Type QueryStatus)\n{\n\tif (QueryStatus != EEnvQueryStatus::Success)\n\t{\n\t\tUE_LOG(LogTemp, Warning, TEXT(\"Spawn bot EQS Query Failed!\"));\n\t\treturn;\n\t}\n\n\n\tUE_LOG(LogTemp,Log,TEXT(\"Found %i alive Bots\"),NrOfAliveBots);\n\n\tif (NrOfAliveBots &gt;= MaxBotCount)\n\t{\n\t\tUE_LOG(LogTemp,Log,TEXT(\"At maximum bot capacity.Skipping bot spawn\"));\n\t\treturn;\n\t}\n\n\tTArray&lt;FVector&gt; Locations = QueryInstance-&gt;GetResultsAsLocations();\n\n\tif (Locations.IsValidIndex(0))\n\t{\n\n\t\tGetWorld()-&gt;SpawnActor&lt;AActor&gt;(MinionClass, Locations[0], FRotator::ZeroRotator);\n\n\t\tDrawDebugSphere(GetWorld(),Locations[0],50.0f,20,FColor::Blue,false,60.0f);\n\t}\n    \n}\n<\/code><\/pre>\n<p>\u4fee\u6539\u9b54\u6cd5\u5b50\u5f39\u7684\u4f24\u5bb3\u540e\uff0c\u5c04\u51fb\u673a\u5668\u4eba\uff0c\u53d1\u751f\u673a\u5668\u4eba\u4f1a\u505c\u6b62\u884c\u4e3a\uff0c\u6389\u5165\u865a\u7a7a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240801\/2024080101.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240801\/2024080101.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u4e3a\u9b54\u6cd5\u5b50\u5f39\u5efa\u7acb\u5b50\u84dd\u56fe,\u56e0\u4e3a\u6211\u4eec\u4e0d\u9700\u8981bot\u80fd\u591f\u6253\u51fa\u90a3\u4e48\u591a\u4f24\u5bb3\uff0c\u7136\u540e\u5728\u5b50\u84dd\u56fe\u4e2d\u6211\u4eec\u4fee\u6539\u4f24\u5bb3\u4e3a5\u70b9<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240801\/2024080102.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240801\/2024080102.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u6211\u4eec\u4e2dRangedTask\u7684ProjectileClass\u8bbe\u7f6e\u4e3a\u521a\u521a\u7684\u5b50\u84dd\u56fe<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240801\/2024080103.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240801\/2024080103.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u65b0\u589eragdoll\u7684\u4ee3\u7801<\/p>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/\/\/SAICharacter.cpp\n\/\/ragdoll\n\t\t\tGetMesh()-&gt;SetAllBodiesSimulatePhysics(true);\n\t\t\tGetMesh()-&gt;SetCollisionProfileName(\"Ragdoll\");\n<\/code><\/pre>\n<p>\u73b0\u5728\u51fb\u4e2d\u540e\uff0cbot\u4e0d\u4f1a\u76f4\u63a5\u6389\u5165\u865a\u7a7a\uff0c\u800c\u662fRagdoll\u7684\u78b0\u649e\u6761\u4ef6\u7684\u6548\u679c<\/p>\n<p>\u8fd9\u662f\u56e0\u4e3a\u6211\u4eecbots\u7684Mesh\u662f\u7531\u80f6\u56ca\u548c\u7403\u578b\u7ec4\u5408\u5728\u4e00\u8d77\u7684\uff0c\u4ed6\u4eec\u4e4b\u95f4\u7684\u7a7a\u9699\u5b58\u5728\u4e00\u5b9a\u7684\u7ea6\u675f<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240801\/2024080104.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240801\/2024080104.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<h3 id=\"\u4e3aai\u6dfb\u52a0\u66f4\u591a\u611f\u89c9\">\u4e3aAI\u6dfb\u52a0\u66f4\u591a\u611f\u89c9<\/h3>\n<p>\u6211\u4eec\u5e0c\u671b\u5f53\u6211\u4eec\u653b\u51fbai\u65f6\uff0c\u4ed6\u4eec\u4e0d\u4f1a\u50bb\u50bb\u7684\u4ecd\u7136\u5f80\u524d\u8d70\uff0c\u800c\u662f\u4f1a\u7acb\u523b\u53cd\u51fb<\/p>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SAICharacter.h\nvoid SetTargetActor(AActor* NewTarget);\n\nUFUNCTION()\n\tvoid OnHealthChanged(AActor* InstigatorActor, USAttributeComponent* OwningComp, float NewHealth,float Delta);\n\n\/\/SAICharacter.cpp\nvoid ASAICharacter::OnPawnSeen(APawn* Pawn)\n{\n\tSetTargetActor(Pawn);\n\n\tDrawDebugString(GetWorld(),GetActorLocation(),\"PlayerSpotted\",nullptr,FColor::White,4.0f,true);\n\t\n}\n\n\nvoid ASAICharacter::OnHealthChanged(AActor* InstigatorActor, USAttributeComponent* OwningComp, float NewHealth,\n\tfloat Delta)\n{\n\tif(Delta &lt;0.0f)\n\t{\n\t\tif(InstigatorActor != this)\n\t\t{\n\t\t\tSetTargetActor(InstigatorActor);\n\t\t}\n\n\t\tif(NewHealth &lt;= 0.0f)\n\t\t{\n\t\t\t\/\/stop BT\n\t\t\tAAIController* AIC =  Cast&lt;AAIController&gt;(GetController());\n\t\t\tif(AIC )\n\t\t\t{\n\t\t\t\tAIC-&gt;GetBrainComponent()-&gt;StopLogic(\"Killed\");\n\t\t\t}\n\n\t\t\t\/\/ragdoll\n\t\t\tGetMesh()-&gt;SetAllBodiesSimulatePhysics(true);\n\t\t\tGetMesh()-&gt;SetCollisionProfileName(\"Ragdoll\");\n\t\t\t\n\n\t\t\t\/\/set lifespan\n\t\t\tSetLifeSpan(10.0f);\n\t\t}\n\t}\n}\n\n\/\/SAttributeComponent.h\nUFUNCTION(BlueprintCallable,Category=\"Attributes\")\n\tbool ApplyHealthChange(AActor* InstigatorActor,float Delta);\n\n\n\/\/SAttributeComponent.cpp\nbool USAttributeComponent::ApplyHealthChange(AActor* InstigatorActor,float Delta)\n{\n\n\tfloat OldHealth = Health;\n\n\tHealth = FMath::Clamp(Health+Delta,0.0f,HealthMax);\n\n\tfloat ActualDelta = Health - OldHealth;\n\tOnHealthChanged.Broadcast(InstigatorActor,this,Health,ActualDelta);\n\treturn ActualDelta != 0;\n}\n\n\/\/SMagicProjectile.cpp\nvoid ASMagicProjectile::OnActorOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor,\n\tUPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult&amp; SweepResult)\n{\n\tif(OtherActor &amp;&amp; OtherActor != GetInstigator())\n\t{\n\t\tUSAttributeComponent* AttributeComp = Cast&lt;USAttributeComponent&gt;(OtherActor-&gt;GetComponentByClass(USAttributeComponent::StaticClass()));\n\t\tif(AttributeComp)\n\t\t{\n\t\t\tAttributeComp-&gt;ApplyHealthChange(GetInstigator(),-DamageAmount);\n\n\t\t\tDestroy();\n\t\t}\n\t}\n}\n\n\/\/SPowerup_HealthPotion.cpp\nif (ensure(AttributeComp) &amp;&amp; !AttributeComp-&gt;IsFullHealth())\n\t{\n\t\t\/\/ Only activate if healed successfully\n\t\tif (AttributeComp-&gt;ApplyHealthChange(this,AttributeComp-&gt;GetHealthMax()))\n\t\t{\n\t\t\tHideAndCooldownPowerup();\n\t\t}\n\t}\n<\/code><\/pre>\n<h3 id=\"\u4e00\u4e9b\u5bf9\u5efa\u8bbe\u6e38\u620f\u6846\u67b6\u6709\u7528\u7684\u6280\u5de7static-function\">\u4e00\u4e9b\u5bf9\u5efa\u8bbe\u6e38\u620f\u6846\u67b6\u6709\u7528\u7684\u6280\u5de7(Static Function)<\/h3>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SAttributeComponent.h\npublic:\n\tUFUNCTION(BlueprintCallable,Category=\"Attributes\")\n\tstatic USAttributeComponent* GetAttributes(AActor* FromActor);\n\n\tUFUNCTION(BlueprintCallable, Category = \"Attributes\",meta = (DisplayName = \"Alive\"))\n\tstatic bool IsActorAlive(AActor* Actor);\n\n\/\/SAttributeComponent.cpp\nUSAttributeComponent* USAttributeComponent::GetAttributes(AActor* FromActor)\n{\n\tif (FromActor)\n\t{\n\t\treturn Cast&lt;USAttributeComponent&gt;(FromActor-&gt;GetComponentByClass(USAttributeComponent::StaticClass()));\n\t}\n\n\treturn nullptr;\n}\n\nbool USAttributeComponent::IsActorAlive(AActor* Actor)\n{\n\t USAttributeComponent* AttributeComp = GetAttributes((Actor));\n\tif(AttributeComp)\n\t{\n\t\treturn AttributeComp-&gt;IsAlive();\n\t}\n\n\treturn false;\n}\n<\/code><\/pre>\n<h3 id=\"\u6539\u5584bots\u7684\u5f00\u706b\u903b\u8f91\">\u6539\u5584Bots\u7684\u5f00\u706b\u903b\u8f91<\/h3>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SBTTask_RangedTask.cpp\nUSBTTask_RangedTask::USBTTask_RangedTask()\n{\n\tMaxBulletSpread = 2.0f;\n}\n \nEBTNodeResult::Type USBTTask_RangedTask::ExecuteTask(UBehaviorTreeComponent&amp; OwnerComp, uint8* NodeMemory)\n{\n\tAAIController* MyController = OwnerComp.GetAIOwner();\n\tif(ensure(MyController))\n\t{\n\t\tACharacter* MyPawn = Cast&lt;ACharacter&gt;(MyController-&gt;GetPawn());\n\t\tif(MyPawn == nullptr)\n\t\t{\n\t\t\treturn EBTNodeResult::Failed;\n\t\t}\n \n\t\tFVector MuzzleLocation = MyPawn-&gt;GetMesh()-&gt;GetSocketLocation(\"Muzzle_01\");\n \n\t\tAActor* TargetActor = Cast&lt;AActor&gt;(OwnerComp.GetBlackboardComponent()-&gt;GetValueAsObject(\"TargetActor\"));\n\t\tif(TargetActor == nullptr)\n\t\t{\n\t\t\treturn EBTNodeResult::Failed;\n \n\t\t}\n\n\t\tif(!USAttributeComponent::IsActorAlive(TargetActor))\n\t\t{\n\t\t\treturn EBTNodeResult::Failed;\n\t\t}\n  \n\t\tFVector Direction = TargetActor-&gt;GetActorLocation() - MuzzleLocation;\n\t\tFRotator MuzzleRotation = Direction.Rotation();\n\n\t\tMuzzleRotation.Pitch += FMath::RandRange(0.0f,MaxBulletSpread);\n\t\tMuzzleRotation.Yaw += FMath::RandRange(-MaxBulletSpread,MaxBulletSpread);\n \n\t\tFActorSpawnParameters Params;\n\t\tParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;\n\t\tParams.Instigator = MyPawn;\n \n\t\tAActor* NewProj = GetWorld()-&gt;SpawnActor&lt;AActor&gt;(ProjectileClass,MuzzleLocation,MuzzleRotation,Params);\n\t\treturn NewProj ? EBTNodeResult::Succeeded : EBTNodeResult::Failed;\n\t}\n \n\t\n\t\n\treturn EBTNodeResult::Failed;\n}\n \n\n\/\/SBTTask_RangedTask.h\nprotected:\n\tUPROPERTY(EditAnywhere,Category=\"AI\")\n\tfloat MaxBulletSpread;\n\npublic:\n\tUSBTTask_RangedTask();\n<\/code><\/pre>\n<p>\u5982\u679c\u6211\u4eec\u5c06\u5f39\u4e38\u7684\u5c3a\u5bf8\u53d8\u5927\uff0c\u5728\u53d1\u751f\u65f6\u4f1a\u76f4\u63a5\u4e0ebots\u53d1\u751f\u78b0\u649e,\u8fd9\u65f6\u5019\u6211\u4eec\u5728\/\/SBTTask_RangedTask.cpp \u4e2d\u7684<\/p>\n<p><code>Params.Instigator = MyPawn;<\/code>\u5c31\u8d77\u5230\u4e86\u4f5c\u7528,\u9632\u6b62\u4e0ebots\u81ea\u8eab\u78b0\u649e<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240910\/2024091001.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240910\/2024091001.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u63a7\u5236\u53f0<\/p>\n<p><code>slomo 5<\/code>\u987f\u5e27\uff0c\u53ef\u4ee5\u52a0\u901f\u8fd0\u884c\u65f6\u7684\u901f\u5ea6<\/p>\n<p>\u5728\u884c\u4e3a\u6811\u4e2d\uff0c\u5c06\u6700\u5927\u504f\u79fb\u518d\u6b21\u4fee\u6539\u4e3a8<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240910\/2024091002.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240910\/2024091002.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<h3 id=\"\u4e3abots\u6dfb\u52a0\u88ab\u51fb\u6548\u679c\u5931\u8d25\">\u4e3aBots\u6dfb\u52a0\u88ab\u51fb\u6548\u679c(\u5931\u8d25)<\/h3>\n<p>\u5728\u4e4b\u524d\u7684\u4e00\u6b21\u4e3a\u89d2\u8272\u6dfb\u52a0\u88ab\u51fb\u6548\u679c\u65f6\u6211\u5c31\u6ca1\u641e\u5b9a<\/p>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SAICharacter.cpp\nASAICharacter::ASAICharacter()\n{\n\tTimeToHitParamName = \"TimeOfHit\";\n}\n\nvoid ASAICharacter::OnHealthChanged(AActor* InstigatorActor, USAttributeComponent* OwningComp, float NewHealth,\n\tfloat Delta)\n{\n    GetMesh()-&gt;SetScalarParameterValueOnMaterials(TimeToHitParamName, GetWorld()-&gt;TimeSeconds);\n}\n\n\n\/\/SAICharacter.h\nprotected:\n\tUPROPERTY(VisibleAnywhere,Category=\"Effects\")\n\tFName TimeToHitParamName;\n<\/code><\/pre>\n<p>\u8fdb\u5165\u5230Minion\u7684\u6750\u8d28\u4e2d<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240910\/2024091003.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240910\/2024091003.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u66f4\u6539\u8fde\u7ebf\u5982\u4e0b\u56fe<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240910\/2024091004.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240910\/2024091004.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<h3 id=\"bots\u6b8b\u8840\u9003\u8dd1\u5bfb\u627e\u63a9\u4f53\u56de\u8840\">Bots\u6b8b\u8840\u9003\u8dd1\u5bfb\u627e\u63a9\u4f53\u56de\u8840<\/h3>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SBTService_CheckAttackRange.h\nUPROPERTY(EditAnywhere, Category = \"AI\")\n\tfloat MaxAttackRange;\n\t\n\/\/SBTService_CheckAttackRange.cpp\nvoid USBTService_CheckAttackRange::TickNode(UBehaviorTreeComponent&amp; OwnerComp, uint8* NodeMemory, float DeltaSeconds)\n{\n\tSuper::TickNode(OwnerComp, NodeMemory, DeltaSeconds);\n\n\t\/\/Check distance between ai pawn and target actor\n\t\n\tUBlackboardComponent* BlackboardComp = OwnerComp.GetBlackboardComponent();\n\tif(ensure(BlackboardComp))\n\t{\n\t\tAActor* TargetActor = Cast&lt;AActor&gt;(BlackboardComp-&gt;GetValueAsObject(\"TargetActor\"));\n\t\tif(TargetActor)\n\t\t{\n\t\t\tAAIController* MyController =  OwnerComp.GetAIOwner();\n\n\t\t\tAPawn* AIPawn = MyController-&gt;GetPawn();\n\t\t\tif (ensure(AIPawn))\n\t\t\t{\n\t\t\t\tfloat DistanceTo = FVector::Distance(TargetActor-&gt;GetActorLocation(), AIPawn-&gt;GetActorLocation());\n\n\t\t\t\tbool bWithinRange = DistanceTo &lt; MaxAttackRange;\n\t\t\t\t\n\t\t\t\tbool bHasLOS = false;\n\t\t\t\tif (bWithinRange)\n\t\t\t\t{\n\t\t\t\t\tbHasLOS = MyController-&gt;LineOfSightTo(TargetActor);\n\t\t\t\t}\n\t\t\t\tBlackboardComp-&gt;SetValueAsBool(AttackRangeKey.SelectedKeyName, (bWithinRange &amp;&amp; bHasLOS));\n\t\t\t}\n\t\t}\n\t}\n}\n\nUSBTService_CheckAttackRange::USBTService_CheckAttackRange()\n{\n\tMaxAttackRange = 2000.f;\n}\n\n\/\/SBTService_CheckHealth.h\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"BehaviorTree\/BTService.h\"\n#include \"SBTService_CheckHealth.generated.h\"\n\n\/**\n * \n *\/\nUCLASS()\nclass ACTIONROGUELIKE_API USBTService_CheckHealth : public UBTService\n{\n\tGENERATED_BODY()\n\n\nprotected:\n\tUPROPERTY(EditAnywhere,Category=\"AI\")\n\tFBlackboardKeySelector LowHealthKey;\n\n\n\tUPROPERTY(EditAnywhere, Category = \"AI\", meta = (ClampMin=\"0.0\", ClampMax=\"1.0\"))\n\tfloat LowHealthFraction;\n\n\tvirtual void TickNode(UBehaviorTreeComponent&amp; OwnerComp, uint8* NodeMemory, float DeltaSeconds) override;\n\n\npublic:\n\tUSBTService_CheckHealth();\n};\n\n\n\/\/SBTService_CheckHealth.cpp\n\n#include \"AI\/SBTService_CheckHealth.h\"\n#include \"SAttributeComponent.h\"\n#include \"BehaviorTree\/BlackboardComponent.h\"\n#include \"AIController.h\"\n\nUSBTService_CheckHealth::USBTService_CheckHealth()\n{\n\tLowHealthFraction = 0.3f;\n}\n\n\nvoid USBTService_CheckHealth::TickNode(UBehaviorTreeComponent&amp; OwnerComp, uint8* NodeMemory, float DeltaSeconds)\n{\n\tSuper::TickNode(OwnerComp, NodeMemory, DeltaSeconds);\n\n\tAPawn* AIPawn = OwnerComp.GetAIOwner()-&gt;GetPawn();\n\tif (ensure(AIPawn))\n\t{\n\t\tUSAttributeComponent* AttributeComp = USAttributeComponent::GetAttributes(AIPawn);\n\t\tif (ensure(AttributeComp))\n\t\t{\n\t\t\tbool bLowHealth = (AttributeComp-&gt;GetHealth() \/ AttributeComp-&gt;GetHealthMax()) &lt; LowHealthFraction;\n\n\t\t\tUBlackboardComponent* BlackBoardComp = OwnerComp.GetBlackboardComponent();\n\t\t\tBlackBoardComp-&gt;SetValueAsBool(LowHealthKey.SelectedKeyName, bLowHealth);\n\t\t}\n\t}\n}\n\n\n\/\/SBTTask_HealSelf.h\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"BehaviorTree\/BTTaskNode.h\"\n#include \"SBTTask_HealSelf.generated.h\"\n\n\/**\n * \n *\/\nUCLASS()\nclass ACTIONROGUELIKE_API USBTTask_HealSelf : public UBTTaskNode\n{\n\tGENERATED_BODY()\n\n\tvirtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent&amp; OwnerComp, uint8* NodeMemory) override;\n\t\n};\n\n\/\/SBTTask_HealSelf.cpp\n\n#include \"AI\/SBTTask_HealSelf.h\"\n\n#include \"AIController.h\"\n#include \"SAttributeComponent.h\"\n\nEBTNodeResult::Type USBTTask_HealSelf::ExecuteTask(UBehaviorTreeComponent&amp; OwnerComp, uint8* NodeMemory)\n{\n\tAPawn* MyPawn = Cast&lt;APawn&gt;(OwnerComp.GetAIOwner()-&gt;GetPawn());\n\tif(MyPawn == nullptr)\n\t{\n\t\treturn EBTNodeResult::Failed;\n\t}\n\n\tUSAttributeComponent* AttributeComp = USAttributeComponent::GetAttributes(MyPawn);\n\tif(ensure((AttributeComp)))\n\t{\n\t\tAttributeComp-&gt;ApplyHealthChange(MyPawn,AttributeComp-&gt;GetHealthMax());\n\t}\n\t\n\n\treturn EBTNodeResult::Succeeded;\n}\n\n<\/code><\/pre>\n<p>\u5b89\u88c5\u56fe\u4e0b\u5185\u5bb9\u6dfb\u52a0EQS \u4ee5\u53ca\u4fee\u6539BTtree<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240912\/2024091201.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240912\/2024091201.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240912\/2024091202.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240912\/2024091202.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240912\/2024091203.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240912\/2024091203.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240912\/2024091204.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240912\/2024091204.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240912\/2024091205.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/AI\/20240912\/2024091205.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<h3 id=\"\u4f18\u5316bots\u6b7b\u4ea1\u5e03\u5a03\u5a03\u6548\u679c\">\u4f18\u5316Bots\u6b7b\u4ea1\u5e03\u5a03\u5a03\u6548\u679c<\/h3>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SGameplayFunctionLibrary.cpp\nbool USGameplayFunctionLibrary::ApplyDirctionalDamage(AActor* DamageCauser, AActor* TargetActor, int DamageAmount,\n\tconst FHitResult&amp; HitResult)\n{\n\tif(ApplyDamage(DamageCauser,TargetActor,DamageAmount))\n\t{\n\n\t\tUPrimitiveComponent* HitComp =  HitResult.GetComponent();\n\t\tif(HitComp &amp;&amp; HitComp-&gt;IsSimulatingPhysics(HitResult.BoneName))\n\t\t{\n\t\t\t\/\/ Direction = Target - Origin\n\t\t\tFVector Direction = HitResult.TraceEnd - HitResult.TraceStart;\n\t\t\tDirection.Normalize();\n\n\t\t\tHitComp-&gt;AddImpulseAtLocation(Direction * 300000.f, HitResult.ImpactPoint, HitResult.BoneName);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>UE AI\u5b66\u4e60\u4e4b\u8def \u884c\u4e3a\u6811\u5b66\u4e60 \u884c\u4e3a\u6811\u7b80\u4ecb \u884c\u4e3a\u6811\u63a7\u5236\u7740\u6e38\u620f\u4e2dAI\u7684\u884c\u4e3a\uff0c\u53ef\u4ee5\u770b\u6210AI\u7684\u5927\u8111\u3002\u5b83\u662f\u4e00\u4e2a\u81ea\u4e0a\u800c\u4e0b [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,27],"tags":[4,5],"class_list":["post-249","post","type-post","status-publish","format-standard","hentry","category-ue","category-cs193u","tag-c","tag-ue"],"_links":{"self":[{"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/249","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=249"}],"version-history":[{"count":13,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/249\/revisions"}],"predecessor-version":[{"id":510,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/249\/revisions\/510"}],"wp:attachment":[{"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=249"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=249"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}