요약: 이 페이지는 MMSoundManager 시스템을 사용할 수 있는 다양한 방법을 다룹니다.
테이블 내용
- MMSoundManager 사운드 컨트롤 - MMSoundManager 트랙 컨트롤 - 모든 사운드를 음소거하는 버튼을 추가하는 방법? - MMSoundManager 모든 사운드 컨트롤 - MMSoundManager 사운드 페이드 - MMSoundManager 트랙 페이드 - MMSoundManager 저장 및 로드
- MMSoundManagerSoundControlEvent - MMSoundManagerSoundFadeEvent - MMSoundManagerAllSoundsControlEvent - MMSoundManagerTrackEvent - MMSoundManagerTrackFadeEvent - MMSoundManagerEvent
|
MMSoundManager란 무엇인가?
MMSoundManager와 그것이 작동하는 클래스들은 이벤트를 사용하여 여러 트랙에서 소리를 재생하고 제어할 수 있는 시스템입니다. 이 시스템은 Unity의 AudioMixer 시스템을 기반으로 구축되었으며, 게임의 소리를 완벽하게 제어할 수 있는 간단한 인터페이스를 제공합니다. 물론, 사용하기 쉽게 하기 위해 전용 피드백도 제공됩니다. Unity의 기본 시스템을 기반으로 구축되었기 때문에 원하지 않는다면 사용하지 않아도 되며, 다른 사운드 시스템과도 평화롭게 공존할 수 있습니다.
주요 기능은 다음과 같습니다:
- 재생/정지/일시정지/재개/해제 사운드
- 완전한 제어: 반복, 볼륨, 피치, 팬, 공간 혼합, 바이패스, 우선순위, 리버브, 도플러 레벨, 스프레드, 롤오프 모드, 거리
- 2D 및 3D 공간 지원
- 내장된 풀링, 최대 성능을 위해 오디오 소스 세트를 자동으로 재활용
- 내장 오디오 믹서 및 그룹, 미리 준비된 트랙(Master, Music, SFX, UI)과 필요에 따라 더 많은 그룹에서 재생할 수 있는 옵션
- 전체 트랙 정지/일시정지/재개/해제
- 모든 소리를 한 번에 정지/일시정지/재개/해제
- 전체 트랙 음소거/볼륨 설정
- 설정 저장 및 로드, 자동 저장/자동 로드 메커니즘 내장
- 소리 페이드 인/아웃
- 트랙 페이드 인/아웃
- 솔로 모드: 하나 또는 모든 트랙을 음소거한 상태에서 소리를 재생한 후 자동으로 음소거 해제
- 깔끔한 API 호출을 위한 PlayOptions 구조체
- 씬 로드 간 및 씬 간 사운드 지속 옵션
- 트랙에 대한 인스펙터 제어(볼륨, 음소거, 음소거 해제, 재생, 일시정지, 정지, 재개, 해제, 사운드 수)
- MMSfxEvents와 같은 이전 MM 시스템 및 이벤트와의 역호환성
- MMSoundManagerEvents: 트랙 음소거, 트랙 제어, 저장, 로드, 재설정, 지속적인 소리 정지
MMSoundManager 설정하기
MMSoundManager를 통해 소리를 재생하려면, 먼저 씬에 MMSoundManager가 필요합니다. 새로운 빈 오브젝트를 생성하고, 씬 계층의 루트에 배치한 다음 MMSoundManager 컴포넌트를 추가합니다. 자동으로 기본 설정 스크립터블 오브젝트가 설정될 것이며(이 상태로 두어도 괜찮습니다), MMSoundManager의 고유한 4개의 트랙 컨트롤을 볼 수 있습니다.
3D 사운드를 재생하는 방법?
|
트랙
MMSoundManager는 트랙을 사용하여 소리를 재생하며, 이를 통해 각 트랙에 대해 전역 제어를 할 수 있습니다. 내부적으로는, 이 트랙들은 MMSoundManager에 의해 조종되는 일반 AudioMixer 그룹입니다. 이는 MMSoundManager 외부에서 직접 소리를 재생해도 모든 소리가 잘 어우러진다는 것을 의미합니다. 이 시스템은 기본적으로 UI, SFX, Music의 3가지 트랙과 나머지 3가지를 모두 제어하는 4번째 Master 트랙으로 구성됩니다. 이 3가지 트랙은 대부분의 게임에 충분하지만, 원한다면 더 많은 트랙을 사용할 수도 있습니다. 소리를 재생할 때는 올바른 트랙에서 재생하는 것이 중요합니다.
피드백
MMSoundManager와 상호 작용하는 가장 쉬운 방법은 피드백을 사용하는 것입니다. 이 시스템은 모든 일반적인 사용 사례를 위한 많은 피드백을 제공하며, 소리를 재생하고, 제어하고, 전체 트랙이나 모든 소리를 한 번에 제어할 수 있게 해줍니다.
MMSoundManager 사운드
첫 번째로 사용해보고 싶은 피드백은 아마도 MMSoundManager Sound일 것입니다. 이 피드백은 MMSoundManager 시스템을 통해 소리를 재생할 수 있게 해줍니다. 인스펙터에서 재생하고자 하는 오디오 클립 또는 무작위로 선택할 오디오 클립 목록을 설정할 수 있습니다. 재생 모드 외에도 편리한 두 개의 테스트 버튼을 통해 소리가 어떻게 들리는지 확인할 수 있습니다. 그 후, 최소/최대 볼륨과 최소/최대 피치를 정의할 수 있습니다.
SoundManager Options 섹션에서는 소리를 재생할 트랙, ID(고유해야 하며, 나중에 특정 소리를 제어하는 데 사용됨)를 선택할 수 있습니다. 여기서 특정 오디오 그룹이나 오디오 소스를 강제로 재활용하도록 설정할 수도 있습니다. 대부분의 경우, 이 항목들을 비워두면 시스템이 알아서 처리합니다. 소리를 반복 재생하도록 설정할 수 있으며(끝에 도달하면 다시 재생), 씬 로드 간에 소리가 지속되도록 설정할 수 있습니다. 곡선에 따른 페이드를 정의하고, 선택적으로 솔로 모드를 선택할 수 있습니다.
솔로 모드에서는 소리가 재생되는 동안 다른 소리를 음소거합니다. Solo Single Track을 선택하면 특정 트랙을 선택하여 소리가 재생되는 동안 해당 트랙을 음소거합니다. Solo All Tracks를 선택하면 다른 모든 트랙을 음소거합니다. 끝에서 Auto Unsolo를 체크하면 시스템이 트랙을 음소거하고, 소리를 재생한 후 자동으로 음소거를 해제합니다.
그 외에도 공간 설정, 바이패스, 거리와 같은 다양한 옵션이 있으며, 이는 AudioSource 컨트롤입니다. 자세한 내용은 AudioSource 문서를 참조하십시오.
MMSoundManager 사운드 컨트롤
이 피드백은 특정 ID와 일치하는 모든 소리를 제어할 수 있게 해줍니다. 이 ID는 위에서 지정한 것과 동일합니다. 일반적으로 각 소리에 대해 고유해야 하지만, 동일한 ID와 일치하는 여러 소리가 있을 수 있으며, 이 경우 모두 동일한 명령에 응답하게 됩니다.
제어 피드백은 다음을 수행할 수 있습니다:
- pause: 지정된 ID의 소리를 일시 정지하며, 재개할 준비를 합니다.
- resume: 지정된 ID의 소리를 재생하며, 일시 정지된 경우 재개하고, 중지된 경우 처음부터 시작합니다.
- stop: 소리를 일시 정지하고 재생 헤드를 파일의 시작 부분으로 이동시킵니다.
- free: 소리를 중지하고 재생 중이던 오디오 소스를 관리자의 오디오 풀로 반환하여 다음 소리가 재생될 준비를 합니다. 이는 자원을 절약하고 성능을 향상시키는 데 도움이 됩니다. 해당 소리가 다시 필요하지 않을 때 사용하십시오.
MMSoundManager 트랙 컨트롤
이 피드백은 유사한 옵션(pause, resume, stop, free)을 제공하지만, 단일 소리가 아닌 전체 트랙(UI, SFX, Music, Master)에 적용됩니다.
트랙 제어 피드백은 다음을 수행할 수 있습니다:
- pause: 지정된 트랙에서 재생 중인 모든 소리를 일시 정지하며, 재개할 준비를 합니다.
- resume: 지정된 트랙의 모든 소리를 재생하며, 일시 정지된 경우 재개하고, 중지된 경우 처음부터 시작합니다.
- stop: 지정된 트랙의 모든 소리를 일시 정지하고, 재생 헤드를 파일의 시작 부분으로 이동시킵니다.
- free: 트랙의 모든 소리를 중지하고, 재생 중이던 오디오 소스를 관리자의 오디오 풀로 반환하여 다음 소리가 재생될 준비를 합니다. 이는 자원을 절약하고 성능을 향상시키는 데 도움이 됩니다. 해당 소리가 다시 필요하지 않을 때 사용하십시오.
- set volume: 트랙의 볼륨을 지정된 값으로 설정합니다.
- mute: 트랙의 모든 소리의 볼륨을 0으로 설정합니다.
- unmute: 트랙의 모든 소리의 볼륨을 음소거되기 전의 값으로 설정합니다.
Feel에는 MMSoundManager를 통해 사용할 수 있는 다양한 오디오 트랙 제어 기능을 보여주는 FeelMMSoundManagerTrackControl 데모 씬이 포함되어 있습니다. 이 데모 씬에서는 개별 트랙에서 소리를 재생하고, 볼륨을 제어하며, 트랙을 음소거/음소거 해제하고, 페이드 인/아웃을 수행할 수 있습니다. 데모 씬에 포함된 슬라이더 컴포넌트는 실제 게임에서 사용하기에 적합하므로, 자유롭게 여러분의 게임에 사용하실 수 있습니다!
모든 사운드를 음소거하는 버튼을 추가하는 방법?
|
MMSoundManager 모든 사운드 컨트롤
Sound Control 및 Track Control 피드백과 유사하게, 이 피드백은 모든 소리를 한 번에 제어할 수 있게 해줍니다.
All Sounds Control 피드백은 다음을 수행할 수 있습니다:
- pause: 모든 소리를 일시 정지하며, 재개할 준비를 합니다.
- play: 모든 소리를 재생하며, 일시 정지된 경우 재개하고, 중지된 경우 처음부터 시작합니다.
- stop: 모든 소리를 일시 정지하고, 재생 헤드를 파일의 시작 부분으로 이동시킵니다.
- free: 모든 소리를 중지하고, 재생 중이던 오디오 소스를 관리자의 오디오 풀로 반환하여 다음 소리가 재생될 준비를 합니다. 이는 자원을 절약하고 성능을 향상시키는 데 도움이 됩니다. 해당 소리가 다시 필요하지 않을 때 사용하십시오.
- free all but persistent: 장면의 모든 소리를 해제하지만, 지속적으로 유지하도록 설정된 소리는 제외합니다.
- free all but looping: 장면의 모든 소리를 해제하지만, 반복 재생하도록 설정된 소리는 제외합니다.
MMSoundManager 사운드 페이드
이 피드백은 지정된 ID의 소리 볼륨을 선택한 지속 시간 동안, 선택한 트윈(tween) 방식에 따라 최종 볼륨으로 페이드 인/아웃할 수 있게 해줍니다.
MMSoundManager 트랙 페이드
이 피드백은 지정된 트랙의 볼륨을 선택한 지속 시간 동안, 선택한 트윈(tween) 방식에 따라 최종 볼륨으로 페이드 인/아웃할 수 있게 해줍니다.
MMSoundManager 저장 및 로드
이 간단한 피드백은 MMSoundManager에게 설정을 저장, 로드 또는 재설정하도록 요청할 수 있게 해줍니다. 설정은 파일에 저장되고 파일에서 로드되므로 세션 간에도 지속될 수 있습니다.
스크립팅
물론, 위에서 설명한 모든 작업을 코드로도 수행할 수 있습니다. MMSoundManager를 직접 참조하거나, 싱글톤 인스턴스(MMSoundManager.Instance.SomeMethod())를 통해 타겟팅할 수 있습니다. 이벤트를 사용하는 것이 권장되는 방법입니다(결합도를 줄이고, 씬에 사운드 매니저가 없을 경우 오류를 발생시키지 않음).
다음은 사운드를 제어할 수 있는 대부분의 이벤트입니다:
MMSoundManagerSoundPlayEvent
이 이벤트는 MMSoundManager에서 소리를 재생할 수 있게 해줍니다.
/// 클립(여기서는 ExplosionSfx)을 SFX 트랙에서, 이 이벤트를 호출하는 객체의 위치에서 재생합니다.
MMSoundManagerSoundPlayEvent.Trigger(ExplosionSfx, MMSoundManager.MMSoundManagerTracks.Sfx, this.transform.position);
위의 호출은 간단하지만, 이벤트를 트리거하고 모든 고급 옵션을 포함하거나 일부만 포함하는 구조체를 전달할 수도 있습니다:
// 새로운 옵션 구조체를 생성합니다.
MMSoundManagerPlayOptions options;
// 기본 값으로 초기화합니다.
options = MMSoundManagerPlayOptions.Default;
// 몇 가지 옵션을 재정의합니다.
options.Volume = 0.5f;
options.Priority = 200;
options.Loop = true;
// 이벤트를 호출하여 옵션을 전달하고, 소리를 재생합니다.
MMSoundManagerSoundPlayEvent.Trigger(sfx, options);
MMSoundManagerSoundControlEvent
MMSoundManager에서 특정 소리를 제어하는 데 사용되는 이벤트입니다. ID로 검색하거나, 오디오 소스를 직접 전달할 수 있습니다.
/// ID가 33인 소리(들)를 정지시킵니다.
MMSoundManagerSoundControlEvent.Trigger(MMSoundManagerSoundControlEventTypes.Stop, 33);
MMSoundManagerSoundFadeEvent
특정 소리의 볼륨을 시간에 따라 페이드시키는 데 사용되는 이벤트입니다.
/// ID가 33인 소리의 볼륨을 2초 동안 0.3으로, 탄력 곡선(elastic curve)으로 페이드 시킵니다.
MMSoundManagerSoundFadeEvent.Trigger(33, 2f, 0.3f, new MMTweenType(MMTween.MMTweenCurve.EaseInElastic));
MMSoundManagerAllSoundsControlEvent
이 이벤트는 MMSoundManager를 통해 재생되는 모든 소리를 한 번에 일시 정지/재생/정지/해제할 수 있게 해줍니다.
/// 모든 소리를 한 번에 정지시킵니다.
MMSoundManagerAllSoundsControlEvent.Trigger(MMSoundManagerAllSoundsControlEventTypes.Stop);
MMSoundManagerTrackEvent
선택된 트랙을 음소거, 음소거 해제, 재생, 일시 정지, 정지, 해제하거나 볼륨을 설정할 수 있게 해줍니다.
/// UI 트랙 전체를 일시 정지합니다.
MMSoundManagerTrackEvent.Trigger(MMSoundManagerTrackEventTypes.PauseTrack, MMSoundManager.MMSoundManagerTracks.UI);
MMSoundManagerTrackFadeEvent
이 이벤트는 MMSoundManager에게 지정된 FinalVolume으로 트랙 전체의 소리 볼륨을 페이드 시키도록 명령할 수 있게 해줍니다.
/// 음악 트랙의 볼륨을 2초 동안 0.5로, EaseInCubic 트윈을 사용하여 페이드 시킵니다.
MMSoundManagerTrackFadeEvent.Trigger(MMSoundManager.MMSoundManagerTracks.Music, 2f, 0.5f, new MMTweenType(MMTween.MMTweenCurve.EaseInCubic));
MMSoundManagerEvent
이 이벤트는 MMSoundManager 설정에서 저장/로드/재설정을 트리거할 수 있게 해줍니다.
/// 설정을 저장합니다.
MMSoundManagerEvent.Trigger(MMSoundManagerEventTypes.SaveSettings);
여러 이벤트 시퀀싱
여러 사용 사례에서는 위의 이벤트 중 둘 이상을 순서대로 호출하는 경우가 많습니다. 다행히도, 이는 매우 간단합니다. 예를 들어, 아래 코드는 소리를 재생한 다음 5초 동안 0으로 페이드 시키고, 최종적으로 해제합니다.
using System.Collections;
using System.Collections.Generic;
using MoreMountains.Tools;
using UnityEngine;
public class Tester : MonoBehaviour
{
public AudioClip MyClip;
[MMInspectorButton("Test")]
public bool TestBtn;
private int _mySoundID = 50;
private float _fadeDuration = 5f;
public void Test()
{
StartCoroutine(SoundSequence());
}
private IEnumerator SoundSequence()
{
// 소리를 재생합니다. 고유한 ID를 전달합니다.
MMSoundManagerPlayOptions options;
options = MMSoundManagerPlayOptions.Default;
options.MmSoundManagerTrack = MMSoundManager.MMSoundManagerTracks.Music;
options.ID = _mySoundID;
MMSoundManagerSoundPlayEvent.Trigger(MyClip, options);
// 소리를 페이드 아웃 시작합니다 (이전에 전달한 ID를 사용합니다)
yield return null;
MMSoundManagerSoundFadeEvent.Trigger(_mySoundID, _fadeDuration, 0f, new MMTweenType(MMTween.MMTweenCurve.EaseInCubic));
// 페이드 아웃이 끝난 후 소리를 해제합니다 (여전히 같은 ID를 사용합니다)
yield return MMCoroutine.WaitFor(_fadeDuration);
MMSoundManagerSoundControlEvent.Trigger(MMSoundManagerSoundControlEventTypes.Free, _mySoundID);
}
}
현재 트랙이 사운드를 재생 중인지 확인하기
언제든지 MMSoundManager의 HasSoundsPlaying 메서드를 사용하여 특정 트랙이 현재 소리를 재생 중인지 확인할 수 있습니다. 다음과 같이 사용할 수 있습니다:
// SFX 트랙에서 소리가 재생 중인 경우...
if (MMSoundManager.Instance.HasSoundsPlaying(MMSoundManager.MMSoundManagerTracks.Sfx))
{
// ... 무언가를 수행합니다
}
풀
MMSoundManager는 소리를 재생할 오디오 소스 풀을 자동으로 관리합니다. 이는 런타임 시 새로운 오디오 소스가 생성/삭제되지 않도록 하여 성능을 향상시키는 데 도움이 됩니다. MMSoundManager 자체에서 풀 크기를 정의할 수 있으며, 이는 동시에 재생할 소리의 최대 수보다 커야 합니다. 풀을 사용할 때, DoNotAutoRecycleIfNotDonePlaying:true를 설정하여 오디오 소스가 재생이 완료되지 않은 경우 재활용되지 않도록 할 수 있습니다.
사운드 매니저 설정 및 AudioMixer
MMSoundManager는 내부적으로 일반 AudioMixer API와 그룹을 사용하여 소리를 개별 트랙에서 재생합니다. 이를 통해 다른 시스템에서도 동일한 그룹을 타겟팅할 수 있습니다. 또한 스냅샷 및 AudioMixer 시스템의 다른 기능을 사용할 수 있습니다. 시스템은 기본 설정 스크립터블 오브젝트를 제공하지만, 필요에 따라 자신만의 설정을 생성하고 MMSoundManager에 바인딩할 수도 있습니다. 여러 개의 설정을 만들어 필요에 따라 전환할 수도 있습니다.
'유니티 에셋 > Feel' 카테고리의 다른 글
MMSequencer (2) | 2024.07.14 |
---|---|
MMAudioAnalyzer (1) | 2024.07.14 |
MMTools (0) | 2024.07.13 |
Tweens and events (0) | 2024.07.13 |
Nice Vibrations (0) | 2024.07.13 |