当前位置: 首页 > article >正文

Unreal Engine 5 C++ Advanced Action RPG 五章笔记

第五章 Enemy AI

2-Perparing Enemy For Combat(为战斗准备敌人)

  • 现在我们主要解决两件事,一件是AI控制器,一件是行为树
    在这里插入图片描述
  • AI拥有AI避障、AI感官、设置团队ID区分敌我
    在这里插入图片描述
  • 行为树要讨论的事件
    在这里插入图片描述
  • AI控制器要讨论的事件
    在这里插入图片描述
  • 在讨论AI回避之前,为了让它正常工作,我们必须获取其中的一个属性
    在这里插入图片描述
  • 为了回避功能正常,我们需要准确反应胶囊体半径,将之前调过胶囊体的大小恢复成默认,网格尺寸调整就行,调胶囊体尺寸要调整他的高与宽,不要使用缩放
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

3-Crowd Following Component(人群跟随组件) ps.这集理论避障

  • AI回避的构建方法两种
    在这里插入图片描述
  • RVO(反向速度障碍)避障的两种方法
    • 使用代理远离彼此:使用次方法会忽略障碍物和导航网格,因此当在移动的时候,AI很可能脱离导航网格边界体积,导致卡在某个位置
      在这里插入图片描述
      在这里插入图片描述
  • Detour Crowd Avoidance(绕道人群回避)
    • 该方法知道其他的代理,会生成一条新的路径来绕过彼此,而且还知道我们导航网格的大小
      在这里插入图片描述
  • 新建一个AI控制器,然后重写这个组件类,因此我们不需要使用这个新的路径跟踪组件,而是需要使用的他的子类,这意味着,我们需要重写WarriorAIController类中的此类
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 然后创建一个子蓝图添加到敌人身上
    在这里插入图片描述
    在这里插入图片描述

4-AI Perception

  • 添加感官系统
  • 头文件
    • #include “Perception/AIPerceptionComponent.h”
    • #include “Perception/AISenseConfig_Sight.h”
      在这里插入图片描述
      在这里插入图片描述
  • 委托函数的参数变量是从这里来的
    在这里插入图片描述
    在这里插入图片描述

5-Generic Team ID

  • 设置团队编号,重写IGenericTeamAgentInterface接口中的GetTeamAttitudeTowards函数,这里这个函数记得加Override
    在这里插入图片描述
    在这里插入图片描述
  • 然后在角色控制器中设置角色的团队属性,这里这个函数记得加Override
    在这里插入图片描述
    在这里插入图片描述
  • 最后在AI感官更新信息的回调函数中测试一下信息
    在这里插入图片描述
    在这里插入图片描述

6-Behavior Tree

  • 行为树,这节内容不怎么多,看看即可
    在这里插入图片描述

7-Configure AI Avoidance(配置AI避障)ps.这集需要多研究

  • 使用AI.Crowd.DebugSelectedActors 1命令可以查看避障调试绘图
  • 新建三个变量用来控制AI避障状态
    在这里插入图片描述
  • 在BeginPlay中设置,避障的参数
    在这里插入图片描述
  • 这几个参数与回避质量最相关的值,具体每个参数的作用看视频,上面这个数组对应我们代码中的那四个质量,我们使用最高质量所以调节Index[3],这里设置为0,当AI到达不了角色位置就会停下来
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

8-Behavior Tree Node Types

  • 虽然绕道回避设置很不错了,但它仍然不能神奇地解决我们在战斗中可能遇到的所有问题。
    在这里插入图片描述
  • 这节课就写了一个获取玩家距离敌人的服务蓝图任务
    在这里插入图片描述在这里插入图片描述

9-Observer Aborts(观察中止 )

  • 首先讨论两个问题,一个是是否进入扫射,一个是判断自己是否离角色远了
    在这里插入图片描述
  • None:无
  • Self:当结果为假时中止自己
  • Lower Priority:当结果为真时,中止其他优先级低的分支
  • Both:以上两点都有
    在这里插入图片描述
  • 具体看视频

10-Orient To Target Actor(瞄准目标Actor)

  • 新建一个BTService类来瞄准目标Actor
    在这里插入图片描述
  • UBTService_OrientToTargetActor.cpp
// Fill out your copyright notice in the Description page of Project Settings.


#include "AI/BTService_OrientToTargetActor.h"

UBTService_OrientToTargetActor::UBTService_OrientToTargetActor()
{
   
	// 设置蓝图中显示的服务节点名称
	NodeName = TEXT("Native Orient Rotation To Target Actor");

	// 初始化服务节点的通知标志,确保该行为树服务能够正常工作并响应事件
	INIT_SERVICE_NODE_NOTIFY_FLAGS();

	RotationInterpSpeed = 5.f;//设置旋转插值速度,默认为5.0f。这个值控制角色朝向目标时的旋转速率
	Interval = 0.f;//这是父类中的变量,定义服务的后续节拍之间的时间跨度
	RandomDeviation = 0.f;//这是父类中的变量,为服务的间隔添加随机范围

	// 添加对象过滤器,确保InTargetActorKey只能选择AActor类型的对象
	InTargetActorKey.AddObjectFilter(this, GET_MEMBER_NAME_CHECKED(ThisClass, InTargetActorKey), 
		AActor::StaticClass());
}

void UBTService_OrientToTargetActor::InitializeFromAsset(UBehaviorTree& Asset)
{
   
	Super::InitializeFromAsset(Asset);

	// 获取行为树关联的黑板资产
	if (UBlackboardData* BBAsset = GetBlackboardAsset())
	{
   
		// 解析所选黑板键࿰

http://www.kler.cn/a/472082.html

相关文章:

  • Python爬虫与1688图片搜索API接口:深度解析与显著收益
  • NodeLocal DNS 全攻略:从原理到应用实践
  • 【HTML】Day02
  • 从零手写实现redis(四)添加监听器
  • 30天开发操作系统 第 12 天 -- 定时器
  • 深入 Solana 共识 - 从分叉到最终确定性
  • WebSocket 实战案例:从设计到部署
  • 非一般的小数:小数的概念新解、小数分类、浮点数的存储
  • 【年前假期学SHU分享】:计算机生物学、智能计算、通信、大数据、电子信息工程
  • GRU-PFG:利用图神经网络从股票因子中提取股票间相关性
  • linux环境搭建redis cluster集群
  • 探索Whisper:从原理到实际应用的解析
  • 【Linux系列】并发与顺序执行:在 Linux 脚本中的应用与选择
  • C语言 扫雷程序设计
  • Linux命令-杀掉被占用的端口号
  • 【计算机网络】常见交换机名词术语
  • Docker安装易有云(casaos安装易有云)
  • 匹配一个文件夹下的所有excel——python
  • C++网络程序设计
  • 137. 只出现一次的数字 II