소리를 넣어주니 훨씬 그럴듯해졌습니다.
1. 돌 떨어지는 소리, 굴러오는 소리, 땅이 꺼지는 소리
2. 좀비 -> 거리에 따라서 감쇄 효과
USoundWave를 활용하는 방법과, USoundCue와 AudioComponent를 활용하는 방법으로 나눠서 작업했습니다.
1. USoundWave
한번 재생해줘야하는 상황에서 활용했습니다.
// ObstacleFloor.cpp
// Sets default values
AObstacleFloor::AObstacleFloor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
static ConstructorHelpers::FObjectFinder<USoundWave> SoundAsset(TEXT("SoundWave'/Game/GameContent/Sound/effect/Destroy.Destroy'"));
if (SoundAsset.Succeeded())
{
DestroySound = SoundAsset.Object;
}
}
float AObstacleFloor::TakeDamage(float DamageAmount, struct FDamageEvent const& DamageEvent, class AController* EventInstigator, AActor* DamageCauser)
{
float fDamage = Super::TakeDamage(DamageAmount, DamageEvent, EventInstigator, DamageCauser);
if (IsValid(Mesh))
{
// 받은 데미지를 적용해줘야함. Z축 -1 방향으로.
Mesh->ApplyDamage(DamageAmount, GetActorLocation(), FVector(0.f, 0.f, -1.f), 100.f);
}
// 전체 사운드 재생
// UGameplayStatics::PlaySound2D(this, DestroySound, 1.f);
// 특정 지점에서 사운드 재생
UGameplayStatics::PlaySoundAtLocation(this, DestroySound, GetActorLocation());
return fDamage;
}
전체 사운드 재생인 PlaySound2D, 특정 지점에서 사운드 재생인 PlaySoundAtLocation이 있습니다.
2. USoundCue, UAudioComponent
// Zombie.cpp
AZombie::AZombie()
{
// Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
static ConstructorHelpers::FObjectFinder<USoundCue> BreathAsset(TEXT("SoundCue'/Game/GameContent/Zombie/ZombieSound/ZombieBreathingCue.ZombieBreathingCue'"));
if (BreathAsset.Succeeded())
{
ZombieBreathingCue = BreathAsset.Object;
}
static ConstructorHelpers::FObjectFinder<USoundCue> ScreamAsset(TEXT("SoundCue'/Game/GameContent/Zombie/ZombieSound/ZombieScreamingCue.ZombieScreamingCue'"));
if (ScreamAsset.Succeeded())
{
ZombieScreamingCue = ScreamAsset.Object;
}
AudioComponent = CreateDefaultSubobject<UAudioComponent>(TEXT("AudioComponent"));
AudioComponent->bAutoActivate = false;
AudioComponent->SetupAttachment(GetMesh());
}
void AZombie::BeginPlay()
{
Super::BeginPlay();
// 소리 재생
AudioComponent->SetSound(ZombieBreathingCue);
AudioComponent->Play();
}
void AZombie::ChangeAnim(EZombieAnim eAnim)
{
ZombieAnim->ChangeAnim(eAnim);
if (eAnim == EZombieAnim::Patrol)
{
AudioComponent->SetSound(ZombieBreathingCue);
AudioComponent->Play();
}
else if (eAnim == EZombieAnim::Walk)
{
AudioComponent->SetSound(ZombieScreamingCue);
AudioComponent->Play();
}
}
위와 같이 오디오 컴포넌트를 플레이어에게 달아주고, 실행시켜주었습니다. 오디오컴포넌트에는 Play() 말고도 Stop() 이라는 유용한 함수도 있습니다.
큐를 생성하면 여러가지 편리한 기능들을 추가할 수 있습니다.
저는 Loop와 Attenuation이라는 감쇄효과를 많이 사용했습니다. 원하는 세팅을 해주고 저장해서 사용하면됩니다.
무료 사운드는 freesound.org/search/?q=Drawer&f=&s=score+desc&advanced=0&g=1 여기에서 다운받았습니다.
'게임 개발 (언리얼 엔진)' 카테고리의 다른 글
UE4 게임 개발 EscapeGame - 16 : 게임다워지는 과정 (0) | 2020.12.25 |
---|---|
UE4 게임 개발 EscapeGame - 15 : 미로 맵 제작 (0) | 2020.12.24 |
UE4 게임 개발 EscapeGame - 13 : BGM(Back Ground Music) (0) | 2020.12.20 |
UE4 게임 개발 EscapeGame - 12 : 좀비 AI (비헤이비어트리, 블랙보드) (0) | 2020.12.18 |
UE4 게임 개발 EscapeGame - 11 : 좀비 애셋 추가 (0) | 2020.12.15 |