斯坦福UE4 C++课学习补充25:AI感知组件

文章目录

一、引入感知组件并绑定委托

  1. PawnSensingComponent是UE中用于感知其他 Pawn(或 Actor)存在的一个组件,常用于 AI 角色的视觉、听觉等感知功能 。它为 AI 提供了基础的感知能力,允许它们在游戏中做出智能反应,如检测玩家位置、追踪目标等。
  • 功能:视觉感知、听觉感知、视锥角度
  • 主要属性
    SightRadius(视觉半径):控制 Pawn 能看到的最大距离。
    SensingInterval(感知间隔):设置每次感知的时间间隔,减少感知的频率来优化性能。
    HearingThreshold(听觉阈值):AI 需要检测的最低噪音水平。
    PeripheralVisionAngle:定义视觉的视野角度。
cpp 复制代码
//SAICharacter.h
void SetTargetActor(AActor* NewTarget);
UPROPERTY(VisibleAnywhere, Category = "Components")
UPawnSensingComponent* PawnSensingComp;

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")
USAttributeComponent* AttributeComp;

UFUNCTION()
void OnPawnSeen(APawn* Pawn);
cpp 复制代码
//SAICharacter.cpp
PawnSensingComp = CreateDefaultSubobject<UPawnSensingComponent>("PawnSensingComp");

void ASAICharacter::OnPawnSeen(APawn* Pawn)
{
	SetTargetActor(Pawn);

		//DrawDebugString(GetWorld(), GetActorLocation(), "PLAYER SPOTTED", nullptr, FColor::White, 4.0f, true);
	
}
void ASAICharacter::SetTargetActor(AActor* NewTarget)
{
	AAIController* AIC = Cast<AAIController>(GetController());
	if (AIC)
	{
		AIC->GetBlackboardComponent()->SetValueAsObject("TargetActor", NewTarget);
	}
}
  1. 委托绑定初始化
cpp 复制代码
void ASAICharacter::PostInitializeComponents()
{
	Super::PostInitializeComponents();

	PawnSensingComp->OnSeePawn.AddDynamic(this, &ASAICharacter::OnPawnSeen);

	AttributeComp->OnHealthChanged.AddDynamic(this, &ASAICharacter::OnHealthChanged);
}

二、优化角色旋转

  1. 在观察AI角色移动时,我们注意到AI角色在转向时是一下就转到就看到的角色方向,非常突兀。为了优化,可以在MovementComponent组件里勾选使用控制器所需的旋转 。该选项将使角色按照旋转速率平滑地旋转到目标角度。
  • 想使上述选项生效,还需取消勾选自身细节面板里的使用控制器旋转Yaw ,这样AI控制器不再强制设置角色当前的Yaw,实现Movement组件完全控制角色的旋转。*
相关推荐
小龙报37 分钟前
《算法通关指南:数据结构和算法篇 --- 顺序表相关算法题》--- 询问学号,寄包柜,合并两个有序数组
c语言·开发语言·数据结构·c++·算法·学习方法·visual studio
序属秋秋秋38 分钟前
《Linux系统编程之开发工具》【编译器 + 自动化构建器】
linux·运维·服务器·c语言·c++·自动化·编译器
夏玉林的学习之路1 小时前
正则表达式
数据库·c++·qt·mysql·正则表达式
夜晚中的人海2 小时前
【C++】模拟算法习题
c++·算法·哈希算法
报错小能手2 小时前
C++笔记(面向对象)多态(编译时 运行时)
c++·笔记
晨非辰2 小时前
《数据结构风云》递归算法:二叉树遍历的精髓实现
c语言·数据结构·c++·人工智能·算法·leetcode·面试
太理摆烂哥2 小时前
map&&set的使用
c++·stl
Dream it possible!2 小时前
LeetCode 面试经典 150_链表_LRU 缓存(66_146_C++_中等)(哈希表 + 双向链表)
c++·leetcode·链表·面试
mailangduoduo2 小时前
命令行传参及调试——vscode平台
c++·人工智能·vscode·代码调试·命令行传参
敲上瘾2 小时前
Linux系统C++开发工具(四)—— jsoncpp 使用指南
linux·服务器·网络·c++·json