UE5-AI

AI角色

角色控制器

AI角色必须要一个角色控制器

角色控制器最基本只需要执行行为树,在EventOnPossess后runBehaviorTree

如果要的是一个角色,可以创建一个Character,在类默认设置中可以找到

Pawn->AIControllerClass,在这里设置AI操控模式和AI控制器类(角色自带移动组件,否则move to行为不起作用)

行为树

行为树是大脑,执行逻辑,数据存储在黑板,所以创建行为树同时也要创建黑板

设置AI的行为,判断,分支Selector,执行Task,顺序Sequence

根节点往下第一个只能接基础3个节点,一般选Sequence或Selector

在Selector上可以套装饰器(Decorator)或者服务(Service)

装饰器:根据逻辑判断当前节点是否执行

服务:当运行到当前节点的时候执行服务内的逻辑

服务

一个随机找点的服务:

首先在行为树界面最上方新建一个服务

重写一个EventReceiveTickAI,这里简单找个三维向量赋值给黑板

新建一个黑板变量

 使用Service:在行为树节点上右键选中想要的服务即可

 装饰器

最经常使用的就是使用黑板值来判断是否执行该节点

在节点上右键选择要使用的BlackBorad

 然后单机蓝色的框(装饰器),在右侧面板上可以指定具体的黑板变量

这里选择变量hasPlayer,当IsSet(设置有值或者为true)就执行

行为Task

 具体的执行节点,同时也是行为树的最末端节点,

创建自定义Task

在行为树面板顶部选择NewTask

 在Task中重写EventReceiveExecuteAI,记得一定执行FinishExecute

使用:直接拉出来选择要执行的Task就行

黑板

负责记录AI行为所需的数据,可以是任意类型数据

对黑板数据的读取和修改跟普通的蓝图类不同

设置变量

需要先创建一个类型为BlackBoardKeySelector变量,再将变量设置为黑板值

比如设置一个在黑板中的三维向量变量

 

 获取变量

EQS

代替大部分常用的服务和Task,例如找点移动等

创建

进入,根节点往下拉可以看到有很多可以执行的节点

例如随机找点

可以选择Points下的各种类型(生成不同形状的查找范围)

可以在右侧面板设置生成点的范围和密度数量等

在这个节点上可以套额外的限制

比如给一个角度限制

在节点上右键AddTest选择dot(余弦)

 单击dot可以选择给生成的点打分筛选

打分可以在后面选点时参与,筛选则直接去除

我这里选择只打分,并且只判断平面,反向打分Inverse(这样在身后的分最高)

判断路径是否可到达

AddTest->PathFinding

使用

完成的EQS可以直接在行为树上使用,如作为Service套在节点上

或作为节点执行

选中节点同时在右侧面板指定要执行的EQS类即可

中断节点

当角色看到玩家或者其他的判断条件需要我们放弃当前的操作时(比如moveTo,移动到一半直接去攻击玩家之类的)

需要在分支或节点上添加一个装饰器(或现有的可以满足需求也可以)

在右侧面板找到FlowControl

一般选择当结果改变时,中断自身(自身及下面的节点)

可以添加多个装饰器判断,只要一个满足就会中断

行为树只有跟节点在亮,不进行其他操作

需要检查所有的条件判断是否有问题

在服务里面添加打印输出,有时虽然Selector或Sequence上面的服务在执行,但是节点和线条并不会在闪烁,需要排查问题出现的节点位置和逻辑

添加wait节点分开其他节点来排查

其他逻辑

始终面朝玩家

通过一个task来实现面朝玩家的需求(tick需求)

但是task执行频率是一次性,并且依赖行为树的频率,并不是完整的每帧执行

在task中重写EventReceiveTickAI和EventReceiveExecuteAI

Execute是一开始执行,先获取玩家(黑板值)和AI的转向速度(自定义)

在Tick中不断地比较目标旋转和自身旋转,使用RInterpTo来实现平滑数值过度,不能忘记finish

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/23153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DSP问题:CCS更改工程名导入报错

1、问题现象 复制一个工程出来后,修改版本号,重新导入工程后报错。 显示项目描述无效。 2、问题原因 由于CCS无法通过工程描述中找到指定名字文件夹。使用记事本打开.project文件,里面的描述还是以前的文件夹名,所以导入时报…

Innodb Buffer Pool缓存机制(三)Innodb Buffer Pool内部组成

一、控制块缓存页 Buffer Pool中默认的缓存页大小和在磁盘上默认的页大小是一样的,都是16KB。为了更好的管理这些在Buffer Pool中的缓存页,InnoDB为每一个缓存页都创建了一些所谓的控制信息,这些控制信息包括该页所属的表空间编号、页号、缓存…

[Vulfocus解题系列]spring 命令执行(CVE-2022-22947)

环境部署 使用docker部署环境 漏洞等级:高危 3 月 1 日,VMware 官方发布安全公告,声明对 Spring Cloud Gateway 中的一处命令注入漏洞进行了修复,漏洞编号为CVE-2022-22947 Spring官方发布 漏洞描述 使用 Spring Cloud Gate…

javaweb—Vue

重点为&#xff1a;双向数据绑定。 框架&#xff1a;是一个半成品软件&#xff0c;是一套可重用的、通用的、软件基础代码模型&#xff0c;基于框架进行开发&#xff0c;更加快捷&#xff0c;更加高效。 Vue快速入门 基础框架&#xff1a; <!DOCTYPE html> <html lan…

【Python Cookbook】S01E20 fnmatch 模块做字符串匹配

目录 问题解决方案讨论 问题 在不同的操作系统下&#xff0c;怎样做字符串匹配&#xff1f; 解决方案 fnmatch() 模块提供两个函数&#xff0c;fnmatch() 以及 fnmatchcase() 可以用来执行做这样的匹配。 from fnmatch import fnmatch, fnmatchcasematch_res fnmatch(foo.…

Technart电动螺丝刀TN101控制器维修

Technart电动螺丝刀以其高效、稳定和精确的扭矩控制而闻名。然而&#xff0c;即使优质的产品&#xff0c;在长时间的使用下&#xff0c;也可能会出现TECHNART电动螺母扳手控制器故障。 常见故障及维修方法 1. 控制器不工作 症状&#xff1a;电动螺丝刀无法启动&#xff0c;或启…

【WEEK15】 【DAY2】【DAY3】Email Tasks【English Version】

Continuation from【WEEK15】 【DAY1】Asynchronous Tasks【English Version】 Contents 17. Asynchronous, Timed, and Email Tasks17.2. Email Tasks17.2.1. Email sending is also very common in our daily development, and Springboot provides support for this as well…

JeecgBoot/SpringBoot升级Nacos(2.0.4到2.2.3)启动报错

错误如下&#xff1a; 报这种错误基本就很头大了&#xff0c;是框架不兼容的问题&#xff0c;自己找很难找到解决方法。 解决方案是把SpringBoot框架版本调高。 修改前&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId&g…

Dell戴尔XPS 16 9640 Intel酷睿Ultra9处理器笔记本电脑原装出厂Windows11系统包,恢复原厂开箱状态oem预装系统

下载链接&#xff1a;https://pan.baidu.com/s/1j_sc8FW5x-ZreNrqvRhjmg?pwd5gk6 提取码&#xff1a;5gk6 戴尔原装系统自带网卡、显卡、声卡、蓝牙等所有硬件驱动、出厂主题壁纸、系统属性专属联机支持标志、系统属性专属LOGO标志、Office办公软件、MyDell、迈克菲等预装软…

Linux基础 (十四):socket网络编程

我们用户是处在应用层的&#xff0c;根据不同的场景和业务需求&#xff0c;传输层就要为我们应用层提供不同的传输协议&#xff0c;常见的就是TCP协议和UDP协议&#xff0c;二者各自有不同的特点&#xff0c;网络中的数据的传输其实就是两个进程间的通信&#xff0c;两个进程在…

32C3-2模组与乐鑫ESP32­-C3­-WROOM­-02模组原理图、升级口说明

模组原理图&#xff1a; 底板原理图&#xff1a; u1 是AT通信口&#xff0c;wiif-tx wifi-rx 是升级口&#xff0c;chip-pu是reset复位口&#xff0c;GPIO9拉低复位进入下载模式 ESP32-WROOM-32 系列硬件连接管脚分配 功能 ESP32 开发板/模组管脚 其它设备管脚 下载固件…

【Python报错】AttributeError: ‘NoneType‘ object has no attribute ‘xxx‘

成功解决“AttributeError: ‘NoneType’ object has no attribute ‘xxx’”错误的全面指南 一、引言 在Python编程中&#xff0c;AttributeError是一种常见的异常类型&#xff0c;它通常表示尝试访问对象没有的属性或方法。而当我们看到错误消息“AttributeError: ‘NoneTyp…

激发AI创新潜能,OPENAIGC开发者大赛赛题解析

人工智能&#xff08;AI&#xff09;的飞速发展&#xff0c;特别是AIGC、大模型、数字人技术的成熟&#xff0c;不仅改变了数据处理和信息消费的方式&#xff0c;也为企业和个人提供了前所未有的机遇。在这种技术进步的背景下&#xff0c;由联想拯救者、AIGC开放社区、英特尔共…

基于SSM+Jsp的高校二手交易平台

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

【远程连接服务器】—— Workbench和Xshell远程连接阿里云服务器失败和运行Xshell报错找不到 MSVCP110.d的问题分析及解决

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、远程连接不上服务器1. Workbench远程连接失败2.Xshell也连接不上3.解决方法(1)问题描述&#xff1a;(2)解决&#xff1a; 4.再次连接服务器 二、运行Xshell…

【前端面试3+1】18 vue2和vue3父传子通信的差别、props传递的数据在子组件是否可以修改、如何往window上添加自定义属性、【多数元素】

一、vue2和vue3父传子通信的差别 1、Vue2 父组件向子组件传递数据通常通过props属性来实现。父组件可以在子组件的标签中使用v-bind指令将数据传递给子组件的props属性。在子组件中&#xff0c;可以通过props属性来接收这些数据。这种方式是一种单向数据流的方式&#xff0c;父…

python-opencv图像分割

文章目录 二值化图像骨骼连通域分割 二值化 所谓图像分割&#xff0c;就是将图像的目标和背景分离开来&#xff0c;更直观一点&#xff0c;就是把目标涂成白色&#xff0c;背景涂成黑色&#xff0c;言尽于此&#xff0c;是不是恍然大悟&#xff1a;这不就是二值化么&#xff1…

香橙派 AIpro 的系统评测

0. 前言 你好&#xff0c;我是悦创。 今天受邀测评 Orange Pi AIpro开发板&#xff0c;我将准备用这个测试简单的代码来看看这块开发版的性能体验。 分别从&#xff1a;Sysbench、Stress-ng、PyPerformance、RPi.GPIO Benchmark、Geekbench 等方面来测试和分析结果。 下面就…

DevExpress Installed

一、What’s Installed 统一安装程序将DevExpress控件和库注册到Visual Studio中&#xff0c;并安装DevExpress实用工具、演示应用程序和IDE插件。 Visual Studio工具箱中的DevExpress控件 Visual Studio中的DevExpress菜单 Demo Applications 演示应用程序 Launch the Demo…

PS去水印

去除图片水印 step1&#xff1a;使用套索工具框选图片水印 step2&#xff1a;CTRLshiftU 去色 step3&#xff1a;CTRLL 色阶 step4&#xff1a;使用第三根吸管去点击需要去掉的图片水印 成功去掉 去掉文字水印 也可按照上述方法去除