적이 플레이어나 플레이어가 지켜야하는 타워를 공격할 때
예를 들면 망치로 공격을 한다고 해보자. 플레이어는 멀리 있고, 적과 타워가 가까이에 있어서
적이 타워를 공격했을 때, 플레이어는 적이 공격하는 행위가 보이지, 그 소리는 멀리서 들리는 것이 훨씬 좋다.
3차원 공간적인 느낌을 더욱 살릴 수 있기 때문이다.
적이 무기를 가지고 공격한다고 했을 때
소리는 적에게서 나는 것으로 할 것이다.
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Effect Sound")
class USoundBase* axeHitSound;
사운드를 사용하고자 할 때는 USoundBase를 사용한다.
/*Effect Sound*/
axeHitSound = CreateDefaultSubobject<USoundBase>(TEXT("axeHitSound Sound"));
ConstructorHelpers::FObjectFinder<USoundBase> axeSound(TEXT("/Script/Engine.SoundWave'/Game/Sound/Wood2.Wood2'"));
if (axeSound.Succeeded())
{
axeHitSound = (axeSound.Object);
}
경로까지 지정해두어 혹시나 블루프린트가 깨지는 이슈가 있을 때, 블루프린트를 다시 생성해도 이 효과음이 잘 할당되어있을 수 있도록 경로도 설정해주어 넣어주었다.
게임 배경음악을 넣을 때는 레벨 블루프린트에서 넣어주면 되는데 이 부분은 나중에 다시 설명하도록 하겠다.
적이 공격하는 타이밍에 이 효과음을 재생시켜주라고 할 것이다.
axe->Attack();
UGameplayStatics::PlaySoundAtLocation(this, axeHitSound, GetActorLocation(), 0.7f, 1, 0, soundDistance);
공격하는 StateMachine에서 Attack 하는 함수가 호출되었을 때 이 효과음이 들리도록 할 것이다.
소리가 지정되는 위치를 매개변수 안에 넣어주었다.
여기서 soundDistance 함수는 Sound Attenuation을 사용하기 위해 만들어준 변수이다.
UPROPERTY(EditDefaultsOnly, Category = "Effect Sound")
class USoundAttenuation* soundDistance;
SoundAttenuation은 소리가 조금 더 입체적으로 들릴 수 있도록, 가까운 곳에서는 큰 소리로 들리게 하고, 멀리 있을 때는 작은 소리로 들릴 수 있도록 설정해주는 것인데, 자세한 내용은 조금 더 검색해보는것이 좋겠다.
이 변수는 적 클래스의 헤더에 선언해주었다.
적이 여러 종류이기 때문에 Enemy들의 부모 클래스를 만들어주고, 각 종류의 Enemy Class들이 만들어져있을 경우 부모 Enemy Class에 변수를 만들어두면 자연스럽게 자식 Class에서도 잘 사용할 수 있다.
https://docs.unrealengine.com/4.27/en-US/WorkingWithAudio/DistanceModelAttenuation/
Sound Attenuation
Reference for the various models available for controlling the attenuation of sounds.
docs.unrealengine.com
https://www.youtube.com/watch?v=HbsES3VNNQY
'언리얼엔진 개발 > Sound Effect' 카테고리의 다른 글
[UnrealEngine5] 원하는 시점에 효과음 넣기 (2) SoundAttenuation (0) | 2023.05.21 |
---|