본문 바로가기

게임프로그래밍/실습1

[언리얼 실습] 31. C++에서 히트시 메타사운드 재생하기


목차

  1. 메타사운드를 담을 변수 선언하기
  2. HitSound 재생하기
  3. 거리에 따른 감쇠 적용하기

1. 메타사운드를 담을 변수 선언하기

 

Hit시 메타사운드를 재생하기 위해서 가장 먼저 메타사운드를 담을 변수를 설정해야한다.

USoundBase 타입은 사운드큐, 메타사운드 둘 모두의 베이스 타입이다.

 

private:
	UPROPERTY(EditAnywhere, Category = "Sound")
	USoundBase* HitSound;

 

히트 사운드의 경우 디폴트 클래스에서도 설정하지만 인스턴스마다 다르게 설정하게 될 수도 있기 때문에 EditAnywhere 속성을 주었다.

 

이제 이것을 재생하기만 하면 된다.


2. HitSound 재생하기

 

에너미 클래스에는 타격시 반응을 구현하는 GetHit() 함수가 존재한다. 이곳에서 사운드를 재생하면 적절할 것이라 생각한다.

 

사운드를 재생하기 위해서는 UGameplayStatics 라이브러리가 필요하다. 헤더 파일을 가져오자.

#include "Kismet/GameplayStatics.h"

 

이제 cpp 파일에서 소리를  재생하면 된다.

 

if (HitSound)
{
	UGameplayStatics::PlaySoundAtLocation(this, HitSound, ImpactPoint);
}

 

첫번째 매개변수는 월드컨텍스트오브젝트로 그냥 간편하게 this를 사용하면 된다.

두번재 매개변수는 재생할 사운드 에셋이다.

세번째 매개변수는 재생할 장소로 충격지점을 재생장소로 선택하였다.

 

포인터를 사용할 때 중요한 점은 포인터가 null 이 아닌지 확인하는 것으로 if 조건문을 통해 이를 확인하였다.

 

이제 컴파일을 하고 타격을 하면 hit 사운드가 재생될 것이다. 물론 에너미 블루프린트에서 HitSound를 할당해주는 것을 잊으면 안된다.


3. 거리에 따른 감쇠 적용하기

 

PlaySoundAtLocation() 함수를 이용하면 해당 장소에서 소리가 재생되는 것이기 때문에 거리가 멀어지면 소리도 줄어들어야 한다. 현재 메타사운드를 재생중인데 감쇠 설정을 하지 않으면 거리가 멀어져도 소리가 줄어들지 않는다.

 

메타사운드의 감쇠를 적용해보자.

 

 

가장 먼저 콘텐츠 브라우저에서 Sound Attenuation을 만들어 준다.

 

 

사운드 감쇠에 들어가면 다음과 같은 디테일 창이 뜨고 이걸 수정할 수 있다.

 

 

주목해야할 부분은 Attenuation (Volume) 부분이다.

Attenuation Function 은 감쇠 방식을 설정한다.

Attenuation Shape는 사운드를 둘러싸는 도형의 모양을 정하는 것으로 이 도형 안에 있어야 전체 크기의 소리를 들을 수 있다.

Linner Radius는 이 도형의 크기이다.

Falloff Distance는 도형에서 벗어나 소리를 들을 수 있는 최대 길이를 말하며 점점 멀어질 수록 소리가 작아지다 이 범위를 벗어나면 소리를 들을 수 없게 된다.

 

 

우리가 주목해야할 곳은 Attenuation Function 으로 이곳에서 설정을 Natual Sound로 바꾸어보자.

감쇠 방식을 커스텀해서 사용할 수도 있겠지만 음향 전문가가 아니기 때문에 따로 설정하는 것은 무리가 있다고 판단되고 자연스러운 소리를 원하고 있어 Natual 설정이 가장 좋을 것으로 보인다.

 

설정을 마쳤으면 이를 설정해주어야 한다. 메타사운드로 들어가자.

 

 

상단에 소스 아이콘이 있다. 누르도록 하자

 

 

 

디페일 패널을 보면 Attenuation Settings가 나온다. 위에서 만든 감쇠 설정을 적용해주면 된다.

 

이렇게 해서 감쇠 설정이 완료되었다.