FMOD Plus 도큐먼트 사이트 이동하기
이 프로젝트는 FMOD Plus 사운드 미들웨어와 유니티 플랫포머를 간단하게 다룬 샘플입니다.
Unity 6.6 기반이며, UI는 전부 UI Toolkit으로 만들고 MVP 패턴으로 구성했습니다. FMOD Plus의 API를 어떤 상황에서 어떻게 쓰는지 데모 씬 3개와 튜토리얼 씬으로 나눠 보여줍니다.
플레이어를 조작해 스테이지를 돌아다니고, 아이템을 먹으면 10초 동안 이동 속도와 음악이 함께 빨라집니다.
오케스트라 영역에 들어가면 BGM이 오케스트라 풍으로 바뀌고, 8Bit 영역에 들어가면 8비트 음악으로 자연스레 전환됩니다. 곡을 다시 재생하는 것이 아니라 FMOD 파라미터를 바꿔 끊김 없이 넘어갑니다.
설정 화면에서 Master · BGM · SFX 볼륨을 각각 조절하고, BGM을 일시정지할 수 있습니다. 여기서 데모 씬 사이를 오갈 수도 있습니다.
- Unity 6.6 샘플 — Unity 6.6(
6000.6.0b5)에서 동작합니다. - UI Toolkit 기반 — 게임 내 HUD와 설정 화면을 모두 UI Toolkit(UXML + USS)으로 만들었습니다.
- MVP 패턴 UI 아키텍처 — UI를 Model · View · Presenter로 분리해, 화면 구성과 게임 로직이 서로를 모르게 유지합니다.
- FMOD Plus 활용 예제 — 볼륨 제어, 파라미터 전환, 원샷 재생, Key List 사용 등을 실제로 동작하는 씬으로 보여줍니다.
- Input System 전역 액션 — 프로젝트 전역 액션(Project-wide Actions)을 사용해 키보드와 게임패드를 함께 지원합니다.
플랫포머를 실제로 플레이하면서 FMOD Plus의 활용을 확인하는 씬입니다. Assets/Scenes/Demo/에 있습니다.
| 씬 | 내용 |
|---|---|
Demo01.unity |
진입 씬입니다. 아이템을 먹으면 일정 시간 음악이 빨라지고, 독 아이템에 닿으면 사망 연출과 함께 BGM이 바뀝니다. |
Demo02.unity |
오케스트라 영역과 8Bit 영역을 오가며 FMOD 파라미터로 곡의 분위기를 전환합니다. |
Setting.unity |
설정 화면입니다. 버스별 볼륨 조절과 BGM 일시정지를 다루며, MVP 구성을 가장 잘 보여주는 씬입니다. |
FMOD Plus의 개별 기능을 하나씩 떼어 보여주는 학습용 씬으로, Assets/Scenes/Tutorial/ 아래에 24개가 있습니다. FMOD Plus는 같은 일을 두 가지 방식으로 할 수 있는데, 폴더가 그 차이에 따라 나뉘어 있습니다.
| 폴더 | 씬 수 | 내용 |
|---|---|---|
Both/ |
2 | 두 방식에 공통으로 해당하는 기본 사용법입니다. |
Audio Source Style/ |
13 | 오브젝트마다 FMODAudioSource를 직접 붙여 쓰는 방식입니다. 3D 감쇠, 거리 기반 재생, Reverb Zone 예제를 포함합니다. |
Audio Manager Style/ |
9 | 중앙의 AudioManager와 CommandSender로 오디오를 제어하는 방식입니다. |
빌드 목록에는 데모 씬 3개와 Both/의 씬 2개만 포함되어 있고, 나머지 튜토리얼 씬은 에디터에서 열어보는 참고용입니다.
UI는 MVP(Model – View – Presenter) 패턴으로 구성했습니다. 각 계층의 역할은 다음과 같습니다.
| 계층 | 위치 | 역할 |
|---|---|---|
| Model | UI/Model/ |
실제 데이터와 상태를 다룹니다. 예를 들어 SettingsModel은 볼륨 값을 읽고 쓰는 통로입니다. |
| View | UI/View/ |
UXML에서 요소를 찾아 붙잡고, 사용자의 조작을 C# 이벤트로 바꿔 알립니다. 게임 로직을 전혀 모릅니다. |
| Presenter | UI/Presenter/ |
View의 이벤트를 받아 Model을 갱신하고, 반대로 Model의 상태를 View에 그립니다. |
| Root | UI/Root/ |
MonoBehaviour 조립 지점입니다. UI가 로드될 때 View와 Presenter를 만들고, 화면이 사라질 때 정리합니다. |
View와 Presenter는 MonoBehaviour가 아닌 순수 C# 클래스이며 IDisposable로 구독을 정리합니다. UI Toolkit 패널은 언제든 다시 로드될 수 있어서, Root가 이전 쌍을 확실히 정리한 뒤 새로 만드는 구조로 잡았습니다.
UI/Core/에는 인스펙터에서 버튼과 슬라이더를 UnityEvent에 연결하는 UIEventBinder가 따로 있습니다. 코드를 작성하지 않고 UI를 붙이고 싶을 때 쓰는 보조 도구입니다.
유니티 프로젝트는 저장소 하위의 FmodPlatformSystem/에 있습니다.
| 경로 | 내용 |
|---|---|
Assets/Scripts/ |
게임 코드입니다. Game.Runtime.asmdef로 묶여 있습니다. |
Assets/Scenes/ |
데모 씬과 튜토리얼 씬입니다. |
Assets/GameResources/ |
플레이어와 아이템의 아트 · 프리팹, 카메라, 배경 타일셋, UXML/USS, Manager/AudioManager.prefab이 있습니다. |
Assets/Settings/ |
InputSystem/, Player/, URP/, Localize/ 설정 에셋입니다. |
Assets/FMOD Plus Data/Resources/ |
AMB · BGM · SFX Key List 에셋입니다. FMOD 이벤트를 문자열 Key로 참조할 때 씁니다. |
Assets/Plugins/FMOD/ |
FMOD의 캐시와 설정입니다. FMOD 통합 코드 자체는 임베디드 UPM 패키지에 있습니다. |
Assets/UI Toolkit/ |
UI Toolkit의 Panel Settings입니다. |
FmodPlatformSystem/FMODAssets/Desktop/ |
FMOD Studio에서 빌드한 뱅크 파일입니다. Assets/ 바깥에 있습니다. |
UnityFmodSample/ |
FMOD Studio 원본 프로젝트입니다. 사운드를 직접 열어보거나 수정할 때 씁니다. |
Player/
| 스크립트 | 역할 |
|---|---|
PlatformerPlayerController2D |
좌우 이동, 점프, 접지 판정, 사망 처리를 담당합니다. |
PlatformerPlayerSettings2D |
이동 속도 · 점프 높이 · 중력 등 튜닝 값을 담은 ScriptableObject입니다. |
PlatformerPlayerAnimationDriver2D |
컨트롤러의 상태를 Animator 파라미터로 전달합니다. |
PlatformerPlayerAudioDriver2D |
점프 · 착지 이벤트를 받아 원샷 효과음을 재생합니다. |
PlayerFeverSpeedController |
피버 상태일 때 이동 속도에 배율을 겁니다. |
Items/
| 스크립트 | 역할 |
|---|---|
FastPeachPickup |
닿으면 일정 시간 피버를 발동시키는 아이템입니다. |
DeadPeachTrigger |
닿으면 플레이어를 사망 처리하고 BGM 파라미터를 조절하는 아이템입니다. |
Gameplay/
| 스크립트 | 역할 |
|---|---|
GameManager |
피버 타이머와 게임 종료를 관리합니다. |
Demo01FastMusicController |
피버 상태에 맞춰 BGM의 FMOD 파라미터를 조절합니다. |
DemoFlowController |
입력을 받아 다음 씬으로 넘깁니다. |
Audio/
| 스크립트 | 역할 |
|---|---|
AudioManager |
버스 볼륨, FMOD 파라미터, 원샷 재생을 한곳에서 다루는 싱글톤입니다. |
CommandSenderLink |
씬에 배치된 CommandSender에 오디오 소스를 연결해 줍니다. |
그 외
UI/— 위 UI 아키텍처 항목 참고EnumData/— 오디오 채널 · 버스 등 공용 열거형입니다.Utility/— 씬 이동 같은 보조 기능입니다.
Packages/manifest.json에서 Git URL로 직접 받아오는 패키지입니다. 레지스트리에 없으므로 프로젝트를 열면 자동으로 내려받습니다.
| 패키지 | 저장소 | 용도 |
|---|---|---|
com.annulusgames.lit-motion |
LitMotion | 트윈 라이브러리입니다. 플레이어 사망 연출 등 애니메이션에 사용합니다. |
com.cysharp.unitask |
UniTask | 유니티용 async / await 라이브러리입니다. |
com.nkstudio.custom-toolbar |
com.nkstudio.custom-toolbar | 에디터 상단 툴바를 확장하는 도구입니다. |
com.nkstudio.ufolder |
UFolder | 프로젝트 폴더 아이콘을 꾸미는 에디터 도구입니다. |
com.unity.scenereference |
unity-scene-reference | 씬을 문자열이 아닌 에셋 참조로 다루게 해 줍니다. |
UniTask는 매니페스트에 포함되어 있지만 현재 샘플 코드에서 직접 사용하는 곳은 없습니다.
Packages/ 폴더에 직접 들어 있는 패키지입니다.
| 패키지 | 버전 |
|---|---|
com.firelight.fmod-for-unity (FMOD for Unity) |
2.3.14 |
com.nkstudio.fmodplus (FMOD Plus) |
1.7.2 |


