FMOD는 사운드 엔진으로 여러 리듬게임에서 사용하고 있다. 특히나 FMOD for Unity 라는게 따로 있어 Unity는 직접적으로 연계해서 사용할 수 있다. 우리가 잘 아는 리듬게임인 DJMAX는 Unity 게임엔진과 FMOD 사운드엔진을 채용하고 있어 기능적인 완성도는 충분하다 라고 생각한다. 그 FMOD를 Godot에서 사용하기 위해서 거쳐야 할 과정을 정리해본다.
FMOD란?
우선 나도 사운드 엔진이 어떤걸 해주는지 잘 모른다. chatgpt 및 FMOD 사이트를 읽어본 결과 오디오 믹싱, 사운드 프로그래밍에 있어서 여러 api들을 지원해주는 것 같다. 리듬게임의 경우에는 음악이 몇 ms만큼 진행 됬는지에 따라 판정을 분류하는데, 이런 부분에 있어서 도움되는 기능들이 있는 것이다. 자세한 것은 아래에서 확인할 수 있을것이다.
FMOD
The sonic universe of Creaks We talked to the creative team responsible for the audio of Creaks from the renowned game developer, Amanita Design. Learn more
www.fmod.com
먼저 위 주소에서 FMOD Studio를 다운받는다. 나는 2.02.25버전을 다운받았다.
간단하게 용어를 알아보자면
Events : 작업한 곡
Banks : 작업한 곡들의 집합
Assets : 작업하기 전의 곡 데이터
쉽게 요약하자면 Events(파일)을 Banks 폴더에 넣어서 Build 하면 압축된 형태의 빌드가 나오는 것이다.
가장 중요한 것은
test 우측에 #unassigned라고 나와있는데 이걸 우클릭해서 Assign to Bank를 해줘야 된다. 이것 때문에 Build를 해도 용량이 이상해서 헤맸다.
그렇게 build를 하면
"~~~~\FMOD Studio\fmodtest\Build\Desktop" 이런 주소에서 Master.bank (본인이 설정한이름) 파일이 나온다. 우리가 필요한 파일은 이 파일이다.
요약하자면
1. FMOD Studio에서 믹싱등의 작업을 할 수 있다. (나는 할줄모른다.)
2. 작업한 곡들을 Banks에 할당해준다.
3. Build해서 .bank파일을 가지고 있어라.
이제 Godot과 FMOD를 연결하는 방법을 알아보자.
Godot과 FMOD연결하기
https://github.com/alessandrofama/fmod-for-godot
GitHub - alessandrofama/fmod-for-godot: FMOD Studio Integration for the Godot Engine
FMOD Studio Integration for the Godot Engine. Contribute to alessandrofama/fmod-for-godot development by creating an account on GitHub.
github.com
우선 내가 사용한 오픈소스는 위의 코드이다.
Github Release에 들어가서 FMOD 2.02.17 for Godot 4.1.1 stable v1.0-alpha-4 버전을 다운받았고
압축을 풀면 위의 두개의 폴더가 나온다.
이 파일들을 작업하는 Godot프로젝트 파일에 넣어주자.
https://alessandrofama.com/tutorials/fmod/godot/
FMOD + Godot Tutorials – Alessandro Famà
These tutorials will teach you the basics of my FMOD for Godot integration: plugin installation, events playback, parameter modulations and mixer control. You will find code examples that you are…
alessandrofama.com
위는 내가 따라간 프로그래머가 작성한 튜토리얼이다. 막히면 이를 참고해서 보자.
이후에 Godot 프로젝트를 키고 Project Setting에 들어간다. 오른쪽 위에 Advanced Settings를 체크해주고
아래로 쭉내리면 FMOD Settings가 나온다. 그중
Banks Path
에 해당하는 곳에
내가 .bank 파일을 둘 곳을 정한다.
프로젝트 내에 폴더를 만들고 위에서 만든 .bank 파일을 그 안에 넣으면된다. 나같은 경우는 /sound 폴더를 만들었다.
Godot에서 오른쪽위를 보면 FMOD라는 버튼이 새로 생겨있다.
위에서 경로만 잘 설정해줬다면 위처럼 내가 넣은 Banks와 Events에 들어가면 어떤 노래를 넣었는지 Play Event로 노래가 잘 나오는지도 확인할 수 있다. 만일 안나온다면 Refresh Project 버튼을 한번 눌러보고 그래도 안나오면 경로를 다시 확인해보자.
그래도 안나온다면 Master파일의 용량이 이상하다면 다시 위로 올라가서 Assign to bank를 안해준것이니 이것까지 확인해보자.
그리고 중요
우리는 보통 게임을 만들 때 GUI로 관리하는 걸 선호 할 수 있지만 나는 코드로 제어하는 걸 선호 하는 편이다. 그리고 코드로 제어하기위해서 있는 기능이라고 생각되는 것이 Refresh Project 옆의 Generate GUIDs 이다.
이는 FMOD Studio를 켜져있는 상태에서
저 버튼을 누르면
이러한 형태로 Event, Bank, Bus의 GUI변수가 저장된다. 이를 아래에서 설명하겠지만
"FMODGuids.Events.Song" 형태로 사용할 수 있다.
저 버튼을 누르면
"~~~\test1\addons\FMOD\editor\fmod_guids.gd" 파일에서 확인할 수 있다.
이렇게 노래까지 잘 불러왔으면 노래를 실행해보겠다.
Godot에서 FMOD를 이용하여 노래 실행하기
FMOD in Godot을 설치하게 되면 아래와 같이 Studio를 포함한 여러개의 노드들이 생긴다. 내가 살펴 볼 것은 3개 StudioBankLoader,StudioEventEmitter ,StudioListener 이다.
우선 StudioBankLoader은 우리가 FMOD에서 압축해제한 Bank를 게임에서 언제 불러올지 이다.
Inspector를 보면 Load On 변수를 Enter Tree(생성될 때) 불러오게 수정하고
NumBank를 늘려서불러올 Bank를 설정해주면 된다.
그다음으로는 중요한 StudioEventEmitter이다. Bank내부의 노래를 호출하는 것이다.
위와 같이 Play Event, Stop Event를 Enter Tree나 Ready 등으로 조절할 수가 있다. 하지만, 나 같은 경우는 이 이벤트(노래)에 관해서 FMOD에서 지원하는 api나 코드들을 이용해서 처리를 해주고 싶어서 이부분을 일반 Node2D를 불러와서 이벤트를 실행시키는 코드를 짰다.
extends Node2D
var instance: EventInstance
func _ready():
var studio_system: StudioSystem = FMODStudioModule.get_studio_system()
var event_description: EventDescription = studio_system.get_event(FMODGuids.Events.ANOTHERONEBITESTHEDUST_INTRO_NORMALIZE)
instance = event_description.create_instance()
instance.start()
instance.release()
func _process(delta: float) -> void:
var timeline_position = instance.get_timeline_position()
print("Current Timeline Position (ms): ", timeline_position)
그리고 위 코드가 해당 코드이다. _process 간격에 해당 노래가 진행된 ms를 호출하는 코드이다.
EventDescription에 위~에서 저장한 FMODGuids를 가지고와서 불러온 것이다.
마지막으로 Studio Listener의 경우에는 FPS게임의 경우에 오른쪽에서 총을 쏘면 헤드셋 오른쪽에서만 들리고 와 같은 기능의 공감각적인 느낌을 내야 될때 쓰는 기능이다. 소리를 내고 듣는 주체가 있을 때 사용하는 기능이다. Listener가 없이 Emitter만 있어도 노래가 들리긴 해야된다.
이상으로 Godot에서 FMOD를 사용해본 후기였다.
'프로그래밍 > 게임개발' 카테고리의 다른 글
Hololens를 이용한 VR튜토리얼 (0) | 2025.02.06 |
---|---|
SceneManager를 잘 만들려면 어떻게 해야할까? (0) | 2024.12.03 |
Godot Engine 사용기 3 (0) | 2024.11.09 |
Godot Engine 사용기 2 (0) | 2024.11.08 |
Godot Engine 사용기 1 (0) | 2024.11.08 |