一、引入感知组件并绑定委托
PawnSensingComponent
是UE中用于感知其他 Pawn
(或 Actor)存在的一个组件,常用于 AI 角色的视觉、听觉等感知功能 。它为 AI 提供了基础 的感知能力,允许它们在游戏中做出智能反应,如检测玩家位置、追踪目标等。
功能 :视觉感知、听觉感知、视锥角度主要属性 : ① SightRadius
(视觉半径):控制 Pawn 能看到的最大距离。 ② SensingInterval
(感知间隔):设置每次感知的时间间隔,减少感知的频率来优化性能。 ③ HearingThreshold
(听觉阈值):AI 需要检测的最低噪音水平。 ④ PeripheralVisionAngle
:定义视觉的视野角度。
void SetTargetActor ( AActor* NewTarget) ;
UPROPERTY ( VisibleAnywhere, Category = "Components" )
UPawnSensingComponent* PawnSensingComp; UPROPERTY ( VisibleAnywhere, BlueprintReadOnly, Category = "Components" )
USAttributeComponent* AttributeComp; UFUNCTION ( )
void OnPawnSeen ( APawn* Pawn) ;
PawnSensingComp = CreateDefaultSubobject< UPawnSensingComponent> ( "PawnSensingComp" ) ; void ASAICharacter :: OnPawnSeen ( APawn* Pawn)
{ SetTargetActor ( Pawn) ; }
void ASAICharacter :: SetTargetActor ( AActor* NewTarget)
{ AAIController* AIC = Cast< AAIController> ( GetController ( ) ) ; if ( AIC) { AIC-> GetBlackboardComponent ( ) -> SetValueAsObject ( "TargetActor" , NewTarget) ; }
}
委托绑定初始化
void ASAICharacter :: PostInitializeComponents ( )
{ Super :: PostInitializeComponents ( ) ; PawnSensingComp-> OnSeePawn. AddDynamic ( this , & ASAICharacter:: OnPawnSeen) ; AttributeComp-> OnHealthChanged. AddDynamic ( this , & ASAICharacter:: OnHealthChanged) ;
}
二、优化角色旋转
在观察AI角色移动时,我们注意到AI角色在转向时是一下就转到就看到的角色方向,非常突兀。为了优化,可以在MovementComponent
组件里勾选使用控制器所需的旋转 。该选项将使角色按照旋转速率平滑 地旋转到目标角度。
想使上述选项生效,还需取消勾选自身细节面板里的使用控制器旋转Yaw ,这样AI控制器不再强制设置角色当前的Yaw
,实现Movement
组件完全控制角色的旋转。*