MetaSound

groot616·2024년 4월 2일
0

언리얼5공부복습용

목록 보기
12/22

기존의 사운드큐보다 더 좋은 기능 제공.
원본 사운드를 통해 다양한 사운드를 임의로 만들고, 변경도 가능함.

Notify 추가

먼저 Sound를 재생시킬 위치(Notify)를 정해줘야 한다.
AM_AttackMontage 에서 Notifies 트랙을 하나 더 추가하고
여기에 Play Sound 라는 Notify를 적절한 위치에 배치한다.
우측의 Details 패널에서 import한 사운드파일을 선택하면 해당 Notify를 지나갈 때 사운드가 재생된다.
Track명도 적절히 바꿔준다.

MetaSound 생성

없으면 플러그인에서 추가후 사용 가능하다. SFX_Whoosh 로 이름붙이고 생성한다.
위쪽의 Output 노드는 메타사운드(다방향사운드를 의미하는것 같음), 아래의 Output 노드는 좌우 스피커로 재생가능한 사운드이다.
좌측 상단의 Members 패널에서 INPUTS 우측의 + 버튼을 눌러 input을 하나 생성해준다.
하단의 Details 패널에서 이름을 변경해주고, type을 WaveAsset 으로, Default Value 에 사운드를 넣어준다.
Whoosh를 드래그해서 노드를 추가해주고, Wave Player 노드를 검색하여 추가해준 뒤 핀을 이어준다(Output Mono 노드는 모든 사운드를 모노(단일채널) 오디오로 출력하게 하는 노드이므로 왼쪽 오른쪽 상관 없다고 함).
사운드의 다양성을 위해 Input(On Play) 노드에서 핀을 끌고 와 Random(float) 노드를 생성하고, Pitch Shift 에 연결하면 랜덤으로 사운드의 피치조절이 가능해진다.
마찬가지로 랜덤 노드를 복사하고 OutLeft 핀을 끌고 와 * 노드(Audio by Float)를 검색하고 핀과 연결하면 볼륨을 무작위로 결정할 수 있다.
다시 AM_AttackMontage로 돌아와서 Whoosh 트랙에 있는 노티파이들을 클릭하고 우측의 Details 패널에서 Sound 탭에 있는 사운드를 방금 생성한 SFX_Whoosh 로 변경하면 메타사운드 적용이 가능하다.


검을 공격을 할때 캐릭터가 나는 사운드도 추가할 수 있다.
똑같이 메타사운드 파일을 생성하고 Input 을 생성해준다.
똑같이 타입을 WaveAsset 으로 변경하고, 우측의 IsArray 체크박스에 체크하면 에셋을 여러개 추가할 수 있다.
필요한 사운드에셋을 전부 추가해준다.
우클릭후 Shuffle 을 검색하고 WaveAsset 을 선택한다.
핀들을 전부 알맞게 연결하면 캐릭터가 내는 메타사운드 적용이 가능해진다.
적절히 랜덤을 통해 피치랑 볼륨을 랜덤으로 나오게 한다.
물론 notify 추가도 해주어야 한다.

메타사운드 활용

1. 걷는 사운드 재생

(12.113 12.114 지형별 사운드 재생 나중에 추가)

무장해제와 무장시, 무기 PickUp시 사운드 재생

1. 무장해제와 무장시

적절한 사운드를 넣는다.

2. 무기 EquipWeapon시

무기 종류에 따라 재생될 사운드를 다르게 구현하려고 한다.
먼저 Weapon.h에 사운드 관련 변수를 하나 선언한다.

// AWeapon.h
class USoundBase;
...
private:
	// 무기를 얻을 시 재생될 사운드
    UPROPERTY(EditAnywhere, Category = "Weapon Properties")
	USoundBase* EquipSound;

Weapon.cpp도 코드를 작성한다.

// AWeapon.cpp
...
// 사운드 재생을 위한 헤더파일
#include "Kismet/GameplayStatics.h"
...
void AWeapon::EquipWeapon(USceneComponent* Inparent, FName InSocketName)
{
	...
    if(EquipSound)
    {
    	// 첫번째 parameter에 왜 GetWorld()말고 this를 쓰는가에 대한 설명
        // 찾아보니 GetWorld()보다 this가 더 효율적일 것이다란 답변 있음
    	UGameplayStatics::PlaySoundAtLocation(this, EquipSound, GetActorLocation());
    }
}

추가
사운드 관련해서 오버랩때문에 오류가 발생한다는데, 발생안해서 혹시몰라 추가정리
Item.h에 있는 오버랩용 Sphere를 Weapoh에서 사용하기 위해 private에서 protect로 옮기고,
EquipWeapon()에 코드 추가.

void AWeapon::EquipWeapon()
{
	...
	if(OverlapSphere)
	{
		OverlapSphere->SetCollisionEnable(ECollisionEnabled::NoCollision);
	}
}
...

0개의 댓글