高级AI记录笔记(一)

学习位置

  • B站位置:红豆丨泥 UE AI 教程
  • 原作者Youtube位置:https://youtu.be/-t3PbGRazKg?si=RVoaBr4476k88gct
  • 素材自备

提前将动画素材准备好

  • 斧头蓝图
    在这里插入图片描述
  • 斧头武器插槽
    在这里插入图片描述
  • 混合空间
    在这里插入图片描述
  • 就是改了一下第三人称模版的动画蓝图
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

行为树中不用Wait实现攻击完成

  • 在敌人攻击事件中添加一个事件分发器,在蒙太奇播放完成或者失败的情况下进行事件通知
    在这里插入图片描述
  • 在攻击任务里面分派这个事件分发器的任务,只有攻击蒙太奇播完完成或者失败才完成任务
    在这里插入图片描述
  • 这样不用Wait也能正常攻击了
    在这里插入图片描述

如果设置了Focus注视敌人没有注视玩家问题

  • 应该是没有使用控制器进行旋转导致的问题
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

让AI沿着样条线巡逻

新建样条线

  • 新建一个Actor作为样条线,新建一个增量巡逻路线的事件
  • Direction-1就是表示向后移动,为1就是向前移动
    在这里插入图片描述
    在这里插入图片描述
  • 新建一个获取样条线世界坐标的点位置函数
    在这里插入图片描述
  • 敌人蓝图中添加这个样条线的实例对象
    在这里插入图片描述
  • 让敌人蓝图去选中样条线
    在这里插入图片描述

添加跟着样条线移动任务

  • 我们新建一个敌人AI的蓝图接口,这样我们就可以减少去使用Cast进行转换
    在这里插入图片描述
  • 将这个接口添加到敌人蓝图上
    在这里插入图片描述
  • 然后实现这个接口的函数,将样条线返回
    在这里插入图片描述
  • 新建一个任务,让AI去沿着样条线移动
    在这里插入图片描述
  • 行为树运行
    在这里插入图片描述
  • Use Fixed Braking Distance for Paths关闭后,AI移动到样条线之间的点就不会减速了
    在这里插入图片描述
  • 运行结果
    请添加图片描述

让移动更加正常

  • 添加一个枚举类型来标明状态
    在这里插入图片描述
  • 添加一个设置移动速度的接口函数
    在这里插入图片描述
    在这里插入图片描述
  • 添加一个任务来设置速度
    在这里插入图片描述
  • 行为树逻辑
    在这里插入图片描述
  • 新建一个装饰器来判断当前AI有没有样条线Actor
    在这里插入图片描述
    在这里插入图片描述

添加AI状态进行攻击与巡逻切换

添加AI状态

  • 添加一个枚举来表示AI的状态
    在这里插入图片描述
  • 添加老板键新建的这个枚举
    在这里插入图片描述
  • 设置行为树,状态为攻击的时候才去执行攻击任务,为消极的时候就执行巡逻任务
    在这里插入图片描述
  • 在AI控制器中设置两个函数用来转换当前AI的消极或者攻击状态
    在这里插入图片描述
    在这里插入图片描述
  • 设置默认状态为巡逻状态在这里插入图片描述

切换AI状态

  • 在主角蓝图中按1来进行切换
    在这里插入图片描述
  • 我们将观察器中止设为自己,这样我们切换的时候就会立即停止当前观察器下的所有任务
    在这里插入图片描述
  • 但是因为移动到样条线任务中使用了AIMoveTo这个节点,它需要时间,就不会知道我们切换的任务,所以我们需要告知这个任务,中止时要做什么,直接停止移动
    在这里插入图片描述

添加Montage行为动画

  • 将准备斧头的事件添加一个Montage动画
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 添加一个不装备斧头的事件
    在这里插入图片描述
    在这里插入图片描述
  • 创建一个不装备斧头的任务
    在这里插入图片描述
  • 行为树逻辑
    在这里插入图片描述

解决Focus注视Bug

  • 装备武器时不需要注视,进行巡逻样条线时不需要注视,要是没有样条线进入Idle状态也没有注视
    在这里插入图片描述

感知系统

视觉感知状态

  • 添加AI感知组件,视觉感知状态
    在这里插入图片描述
  • 蓝图中无法更改归属检测,所以得开启全部检测,C++中才能更改归属检测
    在这里插入图片描述
  • '开启行为树Debug模式,按小键盘4键开启感知Debug模式
    在这里插入图片描述

听觉感知状态

  • 添加听觉感知状态
    在这里插入图片描述
  • AI的听觉感知有函数进行专门的通知,所以我们在角色蓝图中去通知AI的听力系统
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述

伤害感知状态

  • 添加一个伤害感知状态
    在这里插入图片描述
  • 我们需要玩家对AI造成伤害,这个也是需要函数去通知的,因为有专门的AI伤害通知函数,伤害感知不会受到感知系统范围的约束,只要通知了伤害感知就AI就会知道
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述

让AI拥有感官去做一些行为

  • 添加一个枚举作为AI感官的状态
    在这里插入图片描述

  • 添加一个可以让感官知道Actor的函数,首先获取到Actor的感官信息,然后进行遍历它受到刺激的感官,然后与当前AI有的感官进行匹配,如果有,就返回成功与当前感官刺激物
    在这里插入图片描述

  • 通过感官更新时事件,获取当前Actor的刺激感官状态是否是和AI匹配的感官
    在这里插入图片描述

  • 添加一个函数用来执行视觉感官看到玩家就开始攻击
    在这里插入图片描述

  • 如果检测到自己的斧头Actor那就加标签,只检测玩家标签
    在这里插入图片描述
    在这里插入图片描述

视觉感官看到玩家攻击行为

  • 创建一个函数来获取当前AI行为状态
    在这里插入图片描述
  • 然后在执行视觉感官攻击玩家的函数中添加判断当前状态是否可以攻击,然后只攻击玩家,这样就可以不用使用标签玩家了
    在这里插入图片描述
  • 不用使用玩家标签进行筛选了
    在这里插入图片描述

听觉感官听到玩家的巡视行为

  • 在黑板上新建一个侦察的位置老板键
    在这里插入图片描述
  • 新建一个设置侦察状态和获取侦察位置的函数
    在这里插入图片描述
  • 新建一个听觉感官听到声音之后的执行行为函数
    在这里插入图片描述
  • 执行听觉感官行为函数
    在这里插入图片描述
  • 新建一个任务,当敌人走到听觉感官的听到的位置后,巡视一下就要回复到样条线的巡视状态,也就是行为树中的Passive状态
    在这里插入图片描述
  • 行为树逻辑
    在这里插入图片描述
  • 添加一样条线在场景中来测试
    在这里插入图片描述
  • 测试结果
    请添加图片描述

伤害感官受到玩家伤害的攻击行为

  • 添加一个伤害感官受到玩家伤害的攻击行为函数,这里不像视觉那样去判断是不是看见的玩家的原因是因为AI受到攻击是玩家里面直接通知的,所以AI必定知道是谁攻击了它,它就可以直接获取到玩家Character
    在这里插入图片描述
  • 执行伤害感官行为函数
    在这里插入图片描述

EQS(Environmental Query System)

  • EQS(环境查询系统) 是 Unreal Engine 中强大且灵活的 AI 查询系统,允许 AI 根据环境因素做出决策。它通常被用于让 AI 在特定情况下选择最佳的行动位置或目标。
  • EQS 支持多种查询类型,距离查询路径查询等,最常用的是距离测试路径测试
    • 距离测试:测试将返回项目(Item)和选择的距离(Distance To)属性之间的直线距离。
    • 寻路测试:测试可用于确定是否存在通向情境(或从其通出)的路径,通向(或来自)情境的路径开销有多高,或者路径有多长。

添加EQS

  • 添加一个格架
    在这里插入图片描述
  • 要EQS可视化我们得新建一个EQSTestingPawn蓝图
    在这里插入图片描述
  • 投入场景中
    在这里插入图片描述
  • 添加寻路测试,那么场景中不能到达的位置就是蓝色球能到达的就是绿色球
    在这里插入图片描述
    在这里插入图片描述
  • 添加距离测试,越接近500,得分也就越高
    在这里插入图片描述
    在这里插入图片描述
  • 如果最小范围设置300,就会过滤掉300即以内的范围的点
    在这里插入图片描述
    在这里插入图片描述

让AI绕着目标转圈

  • 我们生成一个圆的环境检测
    在这里插入图片描述
  • 新建一个环境查询情景的蓝图
    在这里插入图片描述
    在这里插入图片描述
  • 但是我们需要获取围绕的Actor目标,所以可以在AI的控制器设置攻击状态函数里面提升攻击目标变量
    在这里插入图片描述
  • 环境查询情景蓝图就可以获取到目标了
    在这里插入图片描述
  • 设置到EQS的圆测试上
    在这里插入图片描述
  • 测试,调用EQS
    在这里插入图片描述
  • 把样条线取消,这样AI就会围绕着角色转圈
    在这里插入图片描述
  • 运行结果
    请添加图片描述

让AI转圈而不是随机沿对角线游走

  • 任务:让AI转圈而不是随机沿对角线游走,而是AI只会沿着两个点走,并且更新这两个最近的点进行转圈
  • 为了方便测试,我们在环境查询情景蓝图中设置目标为玩家出生地
    在这里插入图片描述
  • 添加一个寻路测试与距离测试,距离测试设置150-500,这样离测试Pawn小于150的距离的会被过滤掉,而测试Pawn走到那个点位,就正好只有旁边最近小于500的点位可以走
    在这里插入图片描述
    在这里插入图片描述
  • 换回以玩家为目标EQS查询,进行测试
    在这里插入图片描述
  • 测试结果
    请添加图片描述

让AI攻击一下然后再进行转圈

  • 添加一个CD每十秒进行一次攻击
    在这里插入图片描述

设置敌人攻击范围与绕圈的防御半径

  • 让AI移动到理想位置然后进行攻击,当玩家不在AI的理想位置,AI又会移动理想位置
  • 添加两个老板键用来表示攻击范围与绕玩家的圈的半径
    在这里插入图片描述
  • 在AI的接口蓝图中新建一个函数用来获取攻击范围与防御半径,然后在敌人蓝图中实现一下这个函数
    在这里插入图片描述
    在这里插入图片描述
  • 在AI控制器中设置老板键的默认攻击距离与防御半径
    在这里插入图片描述
  • 创建一个装饰器来判断当前AI是否在理想的范围内
    在这里插入图片描述
  • 然后创建一个任务来移动到理想的范围
    在这里插入图片描述
  • 抒写行为树逻辑
    在这里插入图片描述
  • 之前默认移动到玩家目标也换成移动到理想位置
    在这里插入图片描述
    在这里插入图片描述
  • 将判断是否在理想位置装饰器为低优先级,这样就可以中止当前任务并继续执行下一个优先级更低的任务,这样就可以打断AI正在执行移动到下一个点了
    在这里插入图片描述
  • 运行结果
    请添加图片描述

让AI隐藏在掩体后面,然后出来攻击玩家

  • 新建一个EQS用来检测掩体环境,用格架来检测,添加一个路径检测
    在这里插入图片描述
  • 把EQS的环境查询情景蓝图中测试打开
    在这里插入图片描述
  • 测试Pawn换上这个掩体检测的EQS
    在这里插入图片描述
  • 在EQS中添加一个追踪测试
    在这里插入图片描述
    在这里插入图片描述
  • 再添加一个距离测试,设置为仅得分,然后是反向线性型,这样离AI越近的点得分越高,越远的点得分越低
    在这里插入图片描述
    在这里插入图片描述
  • 行为树逻辑,添加一个新的Sequence测试一下这个EQS躲猫猫攻击行为
    在这里插入图片描述
  • 记得切换回玩家才是目标测试点
    在这里插入图片描述
  • 运行结果
    请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ffmpeg的下载与安装

废话不多说, 下载地址,得找官网,不然得注意是不是有夹带私活。 FFmpeg 这个是目前的最新版本; 下载的时候看下自己要的版本,我的是Windows10; 解压后的版本长这样: 接下来进行环境变量的配置&…

【http协议笔记】-- 浏览器简单分析get、post请求

环境:为了了解http协议的交互方式,使用edge浏览器简单分析协议内容,给刚入门的小伙伴分享一下,方便大家学习。 以菜鸟教程的网站为例子: 分析post: 请求url: 请求参数: 请求相应&a…

SpringBoot【实用篇】- 热部署

文章目录 目标:1.手动启动热部署2.自动启动热部署4.禁用热部署 目标: 手动启动热部署自动启动热部署热部署范围配置关闭热部署 1.手动启动热部署 当我们没有热部署的时候,我们必须在代码修改完后再重启程序,程序才会同步你修改的信息。如果我们想快速查…

vue3相对vue2有哪些改变?

https://blog.csdn.net/weixin_44475093/article/details/112386778 https://blog.csdn.net/userDengDeng/article/details/114941956 一、vue3的新特性: 1、速度更快 vue3相比vue2 重写了虚拟Dom实现编译模板的优化更高效的组件初始化undate性能提高1.3~2倍SSR速度…

数据库概论实验一

声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 本文章对数据库概论实验一_求出一箱(每箱装100个)零件的重量 并将输出结果-CSDN博客文章浏览阅读2.7k次,点赞4次,收藏25次。实验数据库,表…

绿色能源发展关键:优化风电运维体系

根据QYResearch调研团队最新发布的《全球风电运维市场报告2023-2029》显示,预计到2029年,全球风电运维市场的规模将攀升至307.8亿美元,并且在接下来的几年里,其年复合增长率(CAGR)将达到12.5%。 上述图表及…

gerrit 搭建遇到的问题

1、启动Apache,端口被占用 : AH00072: make sock: could not bind to address (0S 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。: AH00072: make sock: could not bind to address 0.0.0.:443 a AH00451: no listening sockets available, shutti…

栈和队列相关题 , 用队列实现栈, 用栈实现队列 ,设计循环队列 C/C++双版本

文章目录 1.用队列实现栈2.用栈实现队列3. 设计循环队列 1.用队列实现栈 225. 用队列实现栈 思路: 使用两个队列,始终保持一个队列为空。 当我们需要进行压栈操作时,将数据压入不为空的队列中(若两个都为空,则随便压…

关于STM32在代码中的而GPIO里面的寄存器(ODR等)不需要宏定义的问题

1.GPIO为什么需要宏定义地址 在 STM32 这样的微控制器中,硬件寄存器的地址是固定的并且特定于每个外设(比如 GPIOA、GPIOB 等)。为了方便代码访问这些硬件寄存器,我们通常会使用宏定义来指定每个外设的基地址。这样做有几个理由&a…

kimi智能助手,5大高阶玩法,95%的人还不知道

01 智能搜索:精准定位,一键获取最佳答案 Kimi,作为您的AI助手,拥有卓越的网络搜索能力。 我们能够迅速穿梭于信息海洋,为您筛选出五篇精选网络文章,并提供直接的网址链接。 Kimi的总结能力同样出色,特别适合那些追求效率、不愿深陷长篇文章的用户。 02 PDF速读:快速把…

关于数学建模的一些介绍

为了更好了解世界,我们可以通过数学来描述许多特定的现象,而数学模型就是现实世界的理想化,不过它永远不能完全精确地表示现实世界。 在这篇文章中,我将介绍一些数学建模的基本概念以及相应的基础知识,而关于更具体的…

远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家居(调光)市场、太阳能、车灯、洗墙灯、舞台灯必看!

一,概述 FP7209是台湾远翔一款非同步升压LED驱动IC,封装有2种,分别是SOP-8L(EP), TSSOP-14L(EP)。控制外部开关NMOS。 输入低启动电压2.8V,可支持单节锂电池供电。工作电压5V,VFB反馈电压0.25V,反馈电压低…

算法日记 18 day 二叉树

最后三题,二叉树就结束啦!!! 题目:修剪二叉搜索树 669. 修剪二叉搜索树 - 力扣(LeetCode) 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树…

hashcat使用

0.介绍 Hashcat 软件是一款非常强大的、开源的、号称世界上最快的密码破解软件,配合强大的字典,可以破译超过百分之九十的密码。Hashcat 目前支持各类公开算法高达240类,市面上公开的密码加密算法基本都支持,有 Microsoft LM 哈希…

mysql 安装 windows

新版安装 新版本安装 如果出现initializing database无法安装 则用我当前版本传送门 如MySQL 安装时没有developer default 选项 解决方法传送门 如果上述还不行 可以选择full 汉化下载 传送门

基于Redis缓存机制实现高并发接口调试

创建接口 这里使用的是阿里云提供的接口服务直接做的测试,接口地址 curl http://localhost:8080/initData?tokenAppWithRedis 这里主要通过参数cacheFirstfalse和true来区分是否走缓存,正常的业务机制可能是通过后台代码逻辑自行控制的,这…

vue常见题型(1-10)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 2.2双向绑定的原理是什么vue框架采用的是数据双向绑定的方式,由三个重要部分构成2.2.1.ViewModel2.2.2 双向绑定2.2.3.1.编译Compile2.2.3.2.依赖收集 3…

C语言变量与强制类型转换深度解析

在上一篇文章中,小编对数据类型进行了详细的讲解与剖析,所以本篇文章小编要带大家理解变量和强制类型转。还是老规矩,来波鸡汤,学习一定不能着急,无法一下就学明白的知识我们需要给他时间,一定不要在一个知…

JAVA+微信小程序前后端源码 微信OCR识别 识别身份证信息

官方文档:身份证识别 | 微信开放文档 实现效果 : 用的奥巴马的网络图片测试,图片 后端JAVA代码 这里用的若依的后端,前后端分离版的 package com.ruoyi.common.utils;import java.io.File; import java.io.IOException;import org.apache.http.HttpEntity; import org.apac…

SL6605 输入0.8-5.5V 单颗锂电池驱动LED升压恒流限流方案

一、芯片特性 输入电压范围广:SL6605可接受0.8V至5.5V的输入电压,使其能够轻松应对各种锂电池电压波动。升压恒流功能:该芯片具有升压能力,可将低电压输入转换为适合LED驱动的高电压,并保持恒定的输出电流。限流保护&…