안녕하세요! 첫 포스팅이군요. Unity 카테고리의 첫 포스팅은 리듬게임을 만들어볼까 합니다.


일단 리듬게임을 만들기 위해서 BMS, BPM, 배속 등 알아야 할게 몇가지가 있습니다. 이 글을 쓰면서 공부하고 있는 입장이라. 틀린 내용이 있다면 지적해주시면 감사하겠습니다. 


시작해봅시다!


BMS란?


BMS란 Be-Music Source 의 약자로 BM98을 시작으로 한 프리웨어 리듬게임 혹은 리듬게임의 파일 형식입니다.

Be-Music용 음악을 제작하고 연주하기 위한 포맷으로 BMS의 경우에는 음악을 듣는 것 뿐만 아닌, 간단한 애니메이션을 표시함과 더불어 자신이 연주 및 게임까지 진행 가능한 음악 형식입니다.


BMS들의 확장자는 세가지 형태가 있습니다.


1. BMS - Be-Music Script 

- 플레이어 당 6키의 키 (건반 5개와 턴테이블, 보통 5키로 통칭)를 사용할 수 있습니다.


2. BME - Be-Music Extended

- BMS 확장자와 갔지만 플레이어 당 최대 8개의 키 (건반 7개와 턴테이블, 보통 7키로 통칭)을 지원한다. 7키를 지원하면서 확장자가 BMS인 것도 있기 때문에 5키, 7키의 구분은 6/7 번 건반이 등장하느냐로 판단하는 것이 일반적입니다.


3. BML - Be-Music Longnote

- BME와 같습니다만. 롱노트 오브젝트를 지원합니다. 옛날 프로그램들은 롱노트를 아예 인식하지 못할 수 있기 때문에 롱노트를 사용함을 알리기 위해 확장자를 바꿔서 사용하는 경우가 많습니다.





BMS의 구성요소


일반적으로 BMS파일은 단 하나만 있는것이 아닌 아래와 같은 요소로 구성되어 있습니다.


- 해당 곡의 메타 데이터(게임 플레이와 상관 없든 데이터): 제목, 제작자, 장르 등.

- 게임 플레이를 좌우하는 요소들 : BPM, 판정 난이도 등.

- 사용할 사운드/이미지 데이터 등의 위치와 파일 이름.

- 배경음 (BackGroundMusic, BGM; 오브젝트를 누르는 지 여부와 상관없이 항상 재생되는 소리)들이 재생될 순서.

- 배경 동영상(BGA)들이 등장할 순서.

- 오브젝트들의 배열 방법 (패턴, 채보 등으로도 불림.)


1. BMS파일(확장자 *.BMS)

BMS음악의 핵심이며 내용은 우리가 메모장으로 볼수 있는 텍스트 파일로 되어있습니다.
여기에는 곡제목, 제작자, 곡난이도 등의 기본정보.
게임상에서의 음악 출력과 그림 출력형태, 떨어지는 오브젝트 노트의 배치, 어떤 것을 누르면 어떤 소리가 난다는 등의 정보들이 배치되어 있습니다.
일반적으로 BMS파일은 별도의 제작기로 만들지만 그 포맷을 알고 있다면 텍스트 파일로 만드는 것도 가능합니다.
(이는 HTML문서를 텍스트상에서 만드느냐 웹에디터로 만드느냐의 이치와 비슷합니다.)
BMS이외에 BME라는 파일도 있는데 이것은 7건반 이상을 지원한다는 뜻이며 그 이외에는 BMS와 완전히 같은 것입니다.


2. WAV파일(확장자 *.WAV)
윈도우에서 쓰는 표준 사운드 파일이며 BMS에서 음을 출력하는 기본 요소이기도 합니다.
이 WAV화일들은 크게 백그라운드에 출력하는 배경음과 버튼을 누를 때 출력하는 건반음으로 나뉩니다.
건반음들도 건반 위치에 따라, 혹은 곡의 진행에 따라 계속 바뀌기 때문에 거기에 해당하는 WAV들이 따로따로 있어야 합니다.
BMS자료안에 WAV파일이 하나가 아닌 많이 있는 것도 그러한 이유입니다.
간혹 WAV 대신에 MP3를 사용하는 경우도 있지만 BMS에서는 표준이라고는 볼수 없습니다.

3. 미디화일(확장자 *.MID)
미디음악을 출력하기 위한 음악파일이며 BMS에서는 백그라운드에 출력하는 배경음악용으로 쓰입니다.
하지만 PC가 미디를 지원해야 하며 제대로 지원되며 사운드카드 혹은 미디음원의 종류에 따라서 소리가 다르게 나는 수도 있어서
최근의 BMS에서는 거의 쓰이지 않는 추세이기도 합니다.

4. BMP파일(확장자 *.BMP)
윈도우에서 쓰는 표준 그림 파일이며 BMS에서는 플레이중에 화면 애니메이션(BGA:Back Ground Animation)을 출력하기 위해서 사용합니다.
앞에서도 말씀드렸지만 BMS에서는 애니메이션을 동영상 등을 사용하지 않고 그림 한장한장을 교대 혹은 반복해서 보여주는 방식이므로.
그러한 애니메이션의 한컷한컷을 BMP한 장씩으로 해서 만들게 됩니다.
물론 그림이 아예 안나오는 BMS에서는 이러한 BMP파일들이 없습니다.
간혹 BMP대신에 JPG를 사용하는 경우도 있는데
이 경우에는 용량에서 이득을 보지만 게임에 따라서 특수한 플러그인을 사용해야 제대로 지원할수 있습니다.


모든 프로그램에서 똑같이 동작하는 BMS 파일을 만들려면, bmp/wav파일만을 사용해야 합니다. 대부분 프로그램들은 기본적으로 지원하지않는 jpg등 다른 포맷들을 Susie32 플러그인이나 Window Media 등 외부 라이브러리를 사용하여 처리하지만. 별도의 라이브러리 없이 자체적으로 이러한 파일 포맷들을 지원하는 경우도 있습니다.




기본구조


BMS 파일은 일반적인 텍스트 파일입니다. 개행 문자는 보통 윈도우즈의 개행 문자인 0D 0A(C 형식으로 표시하면 "\r\n")를 사용합니다.


BMS 파일에서 실제로 인식되는 줄은 #으로 시작하는 줄 뿐입니다. 명령 이름이나 파일 이름등은 대소문자를 구별하지 않습니다.

#으로 시작되지 않는 줄은 모두 무시되며, 주석으로 사용합니다.

#으로 시작하는 줄들은 그 줄에 들어 있는 데이터의 종류에 따라서 헤더 섹션과 데이터 섹션으로 나뉩니다.

보통 헤더 섹션이 데이터 섹션 앞에 나오는 경우가 대부분이지만 항상 그런것은 아니며, 두 섹션이 섞여 나오거나 위치가 바뀌어도 같은 뜻을 가져야 합니다.


아직 공부가 많이 필요한 부분이니 부족한 점이 많습니다.

글은 꾸준히 업데이트 할 예정이며, 작업 진행 사항 관련하여 포스팅 할 예정입니다.


이 외에 BMS, 리듬게임 관련 정보는 관련글 링크 참고하시면 될 것 같습니다.



BMS란 무엇인가? 

Guide to understand BMS format

BMS 스크립트 분석 - 기본 속성 안내

BMS 플레이어 만들기 1 - BMS 파일 구조 분석

블로그 이미지

덕배님

5년차 S/W 개발자입니다. Android, Unity, JAVA, C, C++, C# 정보를 공유합니다

,