언리얼4 C++ 몬스터 어그로 (Aggro System)
Intro
- 총기 발사시 몬스터의 탐지범위를 늘리는 시스템 구현
비헤이비어 트리 Detect 서비스 수정
Detect 수정
기존의 탐지 범위 변수 DetectRadius를 AIController
에서 불러오도록함
auto ZombieAI = Cast<AZombieAIController>(OwnerComp.GetAIOwner());
DetectRadius = ZombieAI->Radius;
AI Controller 변수추가
UPROPERTY()
float Radius;
Radius = 1000;
Radius 변수를 추가한다.
Aggro 함수 추가
void AFPSPlayer::Aggro()
{
float Radius = 5000.0f;
TArray<FOverlapResult> OverlapResults;
FCollisionQueryParams CollisionQueryParam;
bool bResult = GetWorld()->OverlapMultiByChannel(
OverlapResults,
GetActorLocation(),
FQuat::Identity,
ECollisionChannel::ECC_Visibility,
FCollisionShape::MakeSphere(Radius),
CollisionQueryParam
);
if (bResult)
{
for (auto OverlapResult : OverlapResults)
{
if (OverlapResult.GetActor()->ActorHasTag("Monster"))
{
auto Zombie = Cast<AZombie>(OverlapResult.GetActor());
auto ZombieAI = Cast<AZombieAIController>(Zombie->GetController());
ZombieAI->Radius = 5000.0f;
DrawDebugSphere(GetWorld(), GetActorLocation(), Radius, 16, FColor::Green, false, 0.2f);
}
}
}
DrawDebugSphere(GetWorld(), GetActorLocation(), Radius, 16, FColor::Red, false, 0.2f);
}
OverlapMultiByChannel
함수를 통해 5000 범위 만큼의 구체 안에 Monster
태그가 있는 액터가 충돌시 AIController
의 Radius
를 5000으로 늘리도록 한다.
Fire
이벤트에 총기 발사시 이 함수를 실행시켜주면 5000범위 내 좀비 몬스터는 탐지범위가 늘어 쫓아오게된다.
댓글남기기