【UE5.1】NPC人工智能——07 NPC在巡逻过程中休息

2024-08-26 14:52

本文主要是介绍【UE5.1】NPC人工智能——07 NPC在巡逻过程中休息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

效果

步骤

一、准备狮子休息的动画

二、实现狮子休息效果

三、随机行为

四、增加行为权重


前言

        在上一篇中(【UE5.1】NPC人工智能——06 NPC攻击)我们已经实现了NPC狮子追到玩家后进行攻击的功能。本篇将在上一篇的基础上继续实现NPC在巡逻过程中偶尔休息的功能。

效果

步骤

一、准备狮子休息的动画

1. 找到狮子休息的动画为“ANIM_Lion_GoToRest”和“ANIM_Lion_Resting”

2. 打开狮子的动画蓝图“ABP_Lion”

在动画图表中添加两个状态,这里命名为“GoToRest”和“Resting”

添加两个布尔类型变量,这里命名为“IsGoToRest”和“IsResting”,分别表示狮子是否要去休息、是否正在休息

设置一下两个状态的输出动画姿势

设置过渡规则

二、实现狮子休息效果

3. 打开狮子蓝图“Character_Lion”,在事件图表中添加如下节点,实现狮子休息与停止休息的功能

4. 回到行为树“BT_Lion”,先添加一个Sequence节点

将设置速度的服务“BTService_SetLionSpeed”移动到刚创建的Sequence上。因为巡逻和休息时的NPC移动速度是不一样的,需要单独设置。

新建一个任务

这里命名为“BTTask_Rest”,表示狮子休息的任务。

在“BTTask_Rest”的事件图表中添加如下节点,调用“Rest”事件

5. 复制一份任务“BTTask_Rest”,这里命名为“BTTask_CancelRest”

打开“BTTask_CancelRest”,将调用的事件改为“CancelRest”

6. 回到行为树,使用“BTTask_Rest”和“BTTask_CancelRest”任务,注意需要将服务中的狮子速度MaxSpeed设置为0。

接下来我们希望狮子巡逻3次后就休息1次,可以通过装饰器“Loop”实现

此时就可以看到狮子走一会就会休息

三、随机行为

接下来我们希望NPC会在巡逻和休息之间有一个随机,而不是每次都是走3次休息1次

7. 在行为树中新建一个服务

这里命名为“BTService_RandomBehavior”

8. 新建一个枚举,命名为“Enum_Lionbehavior”

打开“Enum_Lionbehavior”,添加两个枚举器

9. 打开黑板“Blackboard_Lion”,添加一个枚举类型条目

在细节面板中设置枚举类型为“Enum_Lionbehavior”

9. 回到服务“BTService_RandomBehavior”中,添加一个变量

事件图表中添加如下节点,表示该任务是用于将黑板中的变量“LionBehavior”随机设一个枚举值

10. 回到行为树“BT_Lion”中,添加服务“BTService_RandomBehavior”

选中“BTService_RandomBehavior”,然后在细节面板中设置服务中的变量“LionBehavior”的值为黑板中的“LionBehavior”

为了方便观察,这里先将loop装饰器删除

添加两个Blackground装饰器,当黑板键“LionBehavior”等于“巡逻”时就走巡逻这个分支,等于“休息”时就走休息分支。

此时运行会发现行为树的流程卡在装饰器Blackground,这是因为LionBehivor一开始不等于休息,而Sequence节点在运行时遇到错误就会卡在那里。因此将“Sequence”更改为“Selector”节点

此时运行就可以看到NPC狮子时而巡逻时而休息,行为是随机的。 

四、增加行为权重

比如现在我们希望实现NPC狮子有80%的概率在巡逻,20%的概率在休息。

我们可以打开服务“BTService_RandomBehavior”,修改事件图表如下,这样就有80%的概率将黑板值设为0。

这篇关于【UE5.1】NPC人工智能——07 NPC在巡逻过程中休息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1108880

相关文章

SpringBoot 整合 Grizzly的过程

《SpringBoot整合Grizzly的过程》Grizzly是一个高性能的、异步的、非阻塞的HTTP服务器框架,它可以与SpringBoot一起提供比传统的Tomcat或Jet... 目录为什么选择 Grizzly?Spring Boot + Grizzly 整合的优势添加依赖自定义 Grizzly 作为

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

springboot整合gateway的详细过程

《springboot整合gateway的详细过程》本文介绍了如何配置和使用SpringCloudGateway构建一个API网关,通过实例代码介绍了springboot整合gateway的过程,需要... 目录1. 添加依赖2. 配置网关路由3. 启用Eureka客户端(可选)4. 创建主应用类5. 自定

最新版IDEA配置 Tomcat的详细过程

《最新版IDEA配置Tomcat的详细过程》本文介绍如何在IDEA中配置Tomcat服务器,并创建Web项目,首先检查Tomcat是否安装完成,然后在IDEA中创建Web项目并添加Web结构,接着,... 目录配置tomcat第一步,先给项目添加Web结构查看端口号配置tomcat    先检查自己的to

SpringBoot集成SOL链的详细过程

《SpringBoot集成SOL链的详细过程》Solanaj是一个用于与Solana区块链交互的Java库,它为Java开发者提供了一套功能丰富的API,使得在Java环境中可以轻松构建与Solana... 目录一、什么是solanaj?二、Pom依赖三、主要类3.1 RpcClient3.2 Public

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SpringBoot整合kaptcha验证码过程(复制粘贴即可用)

《SpringBoot整合kaptcha验证码过程(复制粘贴即可用)》本文介绍了如何在SpringBoot项目中整合Kaptcha验证码实现,通过配置和编写相应的Controller、工具类以及前端页... 目录SpringBoot整合kaptcha验证码程序目录参考有两种方式在springboot中使用k

SpringBoot整合InfluxDB的详细过程

《SpringBoot整合InfluxDB的详细过程》InfluxDB是一个开源的时间序列数据库,由Go语言编写,适用于存储和查询按时间顺序产生的数据,它具有高效的数据存储和查询机制,支持高并发写入和... 目录一、简单介绍InfluxDB是什么?1、主要特点2、应用场景二、使用步骤1、集成原生的Influ

SpringBoot实现websocket服务端及客户端的详细过程

《SpringBoot实现websocket服务端及客户端的详细过程》文章介绍了WebSocket通信过程、服务端和客户端的实现,以及可能遇到的问题及解决方案,感兴趣的朋友一起看看吧... 目录一、WebSocket通信过程二、服务端实现1.pom文件添加依赖2.启用Springboot对WebSocket

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti