언리얼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범위 내 좀비 몬스터는 탐지범위가 늘어 쫓아오게된다.
실행 결과

 
      
    
댓글남기기