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,一经查实,立即删除!

相关文章

Android 架构组件面试问答

1. 什么是 Android Architecture Components? 答: 组件是一组库,可帮助您设计健壮、可测试且可维护的应用程序。它们提供了一种清晰且惯用的方式来使用 REST API。这些组件包括 Room、ViewModel、LiveData 等。 2. 什么是LiveData&#xff…

Java接口的变更过程

Java 接口相信所有学过 Java 的人一定都知道,而且 99% 的人一定都背过这个面试题:Java 接口和抽象类的区别是什么?答案都是什么接口方法不能有实现,都是抽象的,接口的方法都默认为 public 修饰等等之类的,这…

推箱子小游戏C++

推箱子是一款经典的益智游戏,玩家需要通过推动箱子来达到特定的目标。在C中实现这样的小游戏需要考虑游戏逻辑、用户输入、图形界面(如果需要的话)以及可能的关卡设计。 下面是一个简单的推箱子游戏的实现框架: 定义游戏环境 创建…

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

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

Spring Boot 开发 -- 静态资源配置详解

一、引言 在开发Web应用程序时,静态资源的管理和配置是一个重要的环节。Spring Boot框架为开发者提供了便捷的静态资源配置方式,使得我们可以轻松地管理如HTML、CSS、JavaScript、图片等静态资源。本文将详细介绍如何在Spring Boot项目中配置和管理静态…

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

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

Android基础-AndroidManifest.xml详解

在Android开发中,AndroidManifest.xml 文件是一个至关重要的组成部分,它位于应用的根目录的 app/src/main/ 文件夹下。这个文件提供了Android系统和其他应用所需的所有关于应用的元数据信息。以下是对 AndroidManifest.xml 文件的详细解析。 1. 文件结构…

[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.…

vue路由缓存

vue路由缓存 在业务场景中有时候需要页面缓存不清空&#xff0c;那么就需要保留缓存(include为需要缓存&#xff0c;而exclude为不缓存&#xff0c;且优先级大于include) <KeepAlive> 是一个内置组件&#xff0c;它的功能是在多个组件间动态切换时缓存被移除的组件实例…

【java 为什么说 Synchronized 是非公平锁?】

文章目录 概要1. 非公平锁的定义2. synchronized 作为非公平锁的原因3. 非公平锁的特点4. 如何实现公平锁总结 概要 在Java中&#xff0c;synchronized 关键字用于实现同步&#xff0c;以确保在多线程环境下对共享资源的访问是线程安全的。然而&#xff0c;synchronized 实现的…

03-3.1.2 栈的顺序存储的实现

&#x1f44b; Hi, I’m Beast Cheng&#x1f440; I’m interested in photography, hiking, landscape…&#x1f331; I’m currently learning python, javascript, kotlin…&#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以订…

邮件地址搜索软件

易邮件地址搜索大师  一、易邮件地址搜索大师特色 — 易邮件地址搜索大师是一款搜索邮件地址和手机号码的软件&#xff0c;可以按整站搜索&#xff0c;也可以按关键词搜索。使用方法非常简单和方便。 — “整站搜索”可以搜索有很多邮件地址的单一网站&#xff0c;主要用于…

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

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

Python怎么染色:深入探索Python中的文本和图形着色技巧

Python怎么染色&#xff1a;深入探索Python中的文本和图形着色技巧 在Python编程中&#xff0c;染色或着色不仅限于文本输出&#xff0c;还涉及图形、图像甚至数据可视化的多个层面。本文将带你走进Python的染色世界&#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…

用户的权限

一&#xff0c;用户权限基础知识 1&#xff0c;用户的权限有&#xff1a; r&#xff1a;读 w&#xff1a;写 x&#xff1a;执行 2&#xff0c;文件的权限&#xff1a; r&#xff1a;可以执行cat、head、tail等命令读取文件中的内容 w&#xff1a;可以用vi/vim或者重定向等…

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、迈克菲等预装软…