언리얼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 태그가 있는 액터가 충돌시 AIControllerRadius를 5000으로 늘리도록 한다.

Fire 이벤트에 총기 발사시 이 함수를 실행시켜주면 5000범위 내 좀비 몬스터는 탐지범위가 늘어 쫓아오게된다.

실행 결과

1

참고문서

댓글남기기