US_Character.cpp
...
#include "Components/PawnNoiseEmitterComponent.h"
...
AUS_Character::AUS_Character()
{
...
NoiseEmitter = CreateDefaultSubobject<UPawnNoiseEmitterComponent>(TEXT("NoiseEmitter"));
NoiseEmitter->NoiseLifetime = 0.01f;
...
}
void AUS_Character::Tick(float DeltaTime)
{
...
if (GetCharacterMovement()->MaxWalkSpeed == GetCharacterStats()->SprintSpeed)
{
auto Noise = 1.f;
if (GetCharacterStats() && GetCharacterStats()->StealthMultiplier)
{
Noise = Noise / GetCharacterStats()->StealthMultiplier;
}
NoiseEmitter->MakeNoise(this, Noise, GetActorLocation());
}
}
NoiseEmitter->NoiseLifetime: UPawnNoiseEmitterComponent로 선언된 NoiseEmitter의 NoiseLifetime 변수는 소음의 수명을 나타낸다. 새로 발생한 소음이 이전에 발생한 소음을 덮어쓰기 위해 경과해야 하는 시간을 의미한다.
StealthMultiplier: 이 스탯은 이전 글에서 작성한 값으로, 레벨이 오르면 값도 증가한다. 현재 코드에서는 레벨이 높을수록 발생하는 소음을 낮추기 위해 작성되었다.
US_Minion.cpp
void AUS_Minion::OnHearNoise(APawn* PawnInstigator, const FVector& Location, float Volume)
{
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, TEXT("Noise detected!"));
GoToLocation(Location);
}
void AUS_Minion::GoToLocation(const FVector& Location)
{
PatrolLocation = Location;
UAIBlueprintHelperLibrary::SimpleMoveToLocation(GetController(), PatrolLocation);
}
void AUS_Minion::PostInitializeComponents()
{
...
GetPawnSense()->OnHearNoise.AddDynamic(this, &AUS_Minion::OnHearNoise);
}
해당 코드는 노이즈 감지를 위해 작성되었다. 단순히 노이즈가 감지되면 AddDynamic에 작성된 OnHearNoise를 통해 Location 위치로 이동시킨다.
'Unreal > 언리얼 엔진 5로 개발하는 멀티플레이어 게임(Book)' 카테고리의 다른 글
[Unreal] US_Minion.cpp (체력) (0) | 2025.04.02 |
---|---|
[Unreal] 경보 시스템 코드 분석 (0) | 2025.04.01 |
[Unreal] US_MinionSpawner.cpp 코드 분석 (0) | 2025.03.30 |
[Unreal] US_Minion.cpp 코드 분석(AI) (0) | 2025.03.30 |
[Unreal] 3D Object Edit Pivot 설정 (0) | 2025.03.29 |