首页 > 其他分享 >学习蓝图+行为树实现AI角色的跟随操作

学习蓝图+行为树实现AI角色的跟随操作

时间:2023-10-23 23:23:48浏览次数:42  
标签:AITree Task 角色 AIController AI 蓝图

跟随B站视频学习

准备工作

一个角色蓝图类用来设置AI角色,一个Blackboard--AI的大脑,一个AITree--AI的行为控制,一个AIController蓝图类--定义AI的控制器。

是否发现角色

首先需要在Blackboard中定义Bool变量是否发现角色。
image
然后在AIController中设置IsSeePlayer。在AIController中新增组件AIPerception用于视线检测,当AI的视线发现了角色时设置bool值为true。
image
首先在AIPerception细节面板中设置如何寻找选择视线,AI Sight Config,其中可以设置视线范围,和视线宽度,目前需要将Neutrals勾选,才可以识别同类型Actor。
image
添加组件事件On Target Perception Updated,当发现目标时,更新。首先将目标类型转换为ThirdPersonCharacter,然后调用Stimulus中的Successfully Sensed值。这个值就是我们对IsSeePlayer的修改值。为了获取IsSeePlayer需要获取黑板BlackBoard,然后使用Set Vlaue as Bool。

发现角色或者没发现角色之后的操作

这一部分需要在AITree里完成,其相当于一个判断并给出对应true false需要进行的操作。
首先需要对AITree选择其所属的BlackBoard。
image
之后Root下有三个Composties,首先我们是需要根据Bool值判断进行什么事件,所以选择Select,然后两个分支Sequence。
image
那么如何确定何时执行其中一个Sequence呢?
image
对每个Sequence添加我们的BlackBoard,然后设置我们要选择的属性IsSeePlayer
image
Key Query为Is Set表示为true执行,Is not Set表示为false执行,并且需要修改Observer aborts为both使得两个sequence的判断级别是同一个级别。
之后我们需要添加判断之后需要进行的任务,所以新建task

发现角色后的Task

image
首先直接利用模板进行函数重载(事件)。
image
当事件接受执行AI时,使用AIMoveTo模块设置AI行动位置,并且对于执行完一次后要添加Finish Execute。使得这个Task结束,否则会一直在这个Task中导致出现错误。
可以看到我们还设置了SetFocus目的是为了是AI的跟随性增强。Event节点中的两个参数OwnerController为AI的控制器,注意这个控制器不是我们新建的那个蓝图类,而是类似我们操作角色的鼠标键盘这种控制器,Controlled Pawn就是AI角色。

没有发现角色的Task

image
当我们没有发现角色,那么就需要把聚焦清除,实现角色的随机朝向移动,同样需要在操作结束后Finish。
同时我们在该Sequence下又拖入了Wait实现到达一个点后停止一段时间。

绑定一个小白人使用AIController

对一个小白人的蓝图打开细节面板,在Pawn面板中选择AI Controllrt的应用类选择我们刚才创建的AIController蓝图。
image
但此时蓝图只是判断了是否观测到角色,但观测后的行为没有绑定,而这些行为我们是定义在AITree里的,所以我们需要在AIController蓝图的事件开始时,绑定AITree。
image
在BTAsset选择我们创建的AITree。

总结

主要是要进行对应的绑定操作
对于AITree 要绑定对应的BlackBoard
对于AIController 要在事件开始时,run AITree,并在其中修改我们想修改的BlackBoard中的值
对于Actor蓝图类 就需要绑定我们创建的AIController蓝图。

如何使得AI跟随的视线更合理,在Task中利用SetFocus和ClearFocus,通过修改控制器的Yaw朝向。而不是利用角色移动组件中的orient rotation to movement来控制。

一个Task的结束需要使用Finish来完成,避免始终进行同一个Task。

标签:AITree,Task,角色,AIController,AI,蓝图
From: https://www.cnblogs.com/XTG111/p/17783728.html

相关文章

  • Microsoft 365 解决方案:基于Teams平台的AI Bot使用场景
    博客链接:https://blog.51cto.com/u_13637423后疫情时代的到来,随着企业逐步转化为数字化办公模式,越来越多的电子邮件,会议和通知呈指数级涌入,大家都希望AI能帮助他们减轻繁重的工作量,把有限的工作时间集中在更有意义的工作上。今天给大家分享两款基于Teams平台的AIBot,帮助大家能更好......
  • AI智慧安防智能监控平台EasyCVR隔天设备录像播放失败是什么原因?该如何解决?
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC等视频流。平台既具备传统......
  • xpath的contains用法
    xpath('//div[contains(@class,"a")andcontains(@class,"b")]')#它会取class含有有a和b的元素xpath('//div[contains(@class,"a")orcontains(@class,"b")]')#它会取class含有a或者b满足时,或者同时满足时的元素starts-with顾名思义,匹......
  • OGG-03542 Failed to connect to the database
    GGSCI(dwdb01)4>dbloginuseridGOLDENGATE@cnlionrdb,password*******2023-10-2317:11:26INFOOGG-03542Failedtoconnecttothedatabase.Verifythattheconnectionstringandfollowingenvironmentvariablesarecorrect:LD_LIBRARY_PATH=/ho......
  • Unity3D学习记录04——利用射线实现角色类似LOL的移动
    首先新建一个空白的GameObject,挂在一个MouseManager的脚本实现思路:通过获取鼠标点击的位置,获得该位置的信息,然后使角色移动到该位置MouseManager脚本的代码如下:1usingSystem.Collections;2usingSystem.Collections.Generic;3usingUnityEngine;4usingUnityEngi......
  • Failed to start discovery: org.bluez.Error.InProgress
    #bluetoothctlscanonFailedtostartdiscovery:org.bluez.Error.InProgress问题背景:blueZ版本:#bluetoothd--version5.52kernel版本:4.4.13Bluetoothchipset:RTL8761B(vpid0bda:8771)问题描述:执行scan时报“Failedtostartdiscovery:org.bluez.Error.InPro......
  • CF1479B1 Painting the Array I
    如果两种方案末尾两数有一数相同,那么答案较大的方案不劣于答案较小的方案。答案较大的方案只需\textbf{模仿}答案较小的方案即可,在状态变成相同之前答案最多只会少\(1\)。所以只需要考虑末尾两数\(a,b\)与新进来的数\(c\)各不相同时该替换哪个。假设\(a\)下次出现的位置......
  • swagger配置后,系统无法启动,报Failed to start bean 'documentationPluginsBootstrappe
    swagger与springboot版本不兼容解决方案:1.swagger依赖版本过高,可以降低版本。2.在swagger配置类的application.yml配置文件中添加如下内容:spring:mvc:pathmatch:matching-strategy:ant_path_matcher我使用的方法二,完美解决。......
  • 《安富莱嵌入式周报》第321期:开源12导联便携心电仪,PCB AI设计,150M示波器差分探头,谷歌
     视频版:https://www.bilibili.com/video/BV1ju4y1D7A8/1、开源12导联便携心电仪https://voltagedivide.com/2017/10/14/psoc-design-and-implementation-of-a-12-lead-portable-ecg/这个开源有完整的上位机,下位机和原理图,并且有一个详细的设计论文。12导联心电图是心电图检查中常......
  • langchain中的LLM模型使用介绍
    简介构建在大语言模型基础上的应用通常有两种,第一种叫做textcompletion,也就是一问一答的模式,输入是text,输出也是text。这种模型下应用并不会记忆之前的问题内容,每一个问题都是最新的。通常用来做知识库。还有一种是类似聊天机器人这种会话模式,也叫Chatmodels。这种模式下输入是......