유니티 리듬게임 (BMS 구동기) 제작 근황. (5)

개요.
유니티엔진, BASS.net 라이브러리, BMS 기반의 음악게임.
배속, 변속, 일시정지등 일반적인 건반류 음악게임에 있는것들은 얼추 구현. 롱노트의 판정은 아직.

포맷.
이쪽 계열에서 가장 많이 쓰이는 BMS(Be-Music Script)포맷을 사용했다. 그 중 BME BML 등의 바리에이션과 롱노트 및 7키 등 일부 필수적으로 필요하다 판단되는 확장 명령어를 우선적으로 지원했다. 곡이 멈추거나 속도가 바뀌거나 폭탄노트 등의 부분도 처리된 상태. 그때 그때 다른 노트를 내려보내는 #IF 와 RANDOM 등은 아직 미지원.

유니티엔진.
유니티엔진에서는 NGUI를 이용하여 메뉴와 효과등을 구현했다. 화면 표시와 노트가 떨어지는 것은 배경효과 등을 위해서 3D로 구현했는데, Vector3의 좌표 중 남는 z값에 노트의 타이밍을 넣어서 메모리를 조금이라도 아껴보려고 했다.

사운드 라이브러리. (BASS.net + BASS)
유니티 내부가 아닌 런타임 상에서 실시간으로, 다양한 포맷의 음악파일을 읽기 위해서 별도의 사운드 라이브러리(BASS)를 사용 했다. 또한 화면 하단의 스펙트럼을 구현하기 위해 해당 사운드 라이브러리의 WASAPI(Windows Audio Session API)를 이용하여 윈도우의 사운드를 받아옴. 향후 이 API를 이용하여 사운드카드와 직접, 단독연결하여 음질 향상도 가능하다.

영상 처리.
동영상 재생은 총 두가지로 첫 번째 방식은 과거 BMS 극 초기에 제안된 방식으로, 정해진 타이밍에 비트맵 이미지를 계속 바꿔주면서 기본 2장, 확장 포함 3장의 레이어 이미지 BGA로 처리된다. 단, 검은색(#000000)컬러와 없는 파일(예외처리 별도로 해야함)은 투명색 처리, 정식 규격은 256×256의 정사각형 비트맵. 유니티 엔진상에서 바로 불러오면 이미지도 깔끔하지 않을 뿐 더러 포맷도 BMP,JPG,PNG 등등 다양하게 쓰고있고, 검은색도 투명하게 바로 바꿀 수 없다. 또한 90년대 말 당시의 용량 절약 목적으로 가로만 256으로 맞추고 세로는 이미지가 표시되는 높이까지만(256이 안되는) 표시하도록 하는 등 명확하게 만들어지지 않은 파일이 많다. 때문에 C#에 있는 이미지 프로세싱을 이용하여 로드 -> 사이즈를 정사각형에 맞춤 -> 검은색을 투명화 -> 이미지 확대 및 내장 알고리즘으로 화질 개선 -> 캐시폴더에 저장 하는 절차를 거치게 된다… 두 번째 실행부터는 캐시검사로 시간 단축. 멀티스레딩을 적용하면 더 단축되겠지.
두번째 방식은 일반 동영상 방식인데, 시작시간만 정해져있고 이후로 별 작업이 없다. 에셋을 이용했다.

잡설.
4월에 회사 취직 이후로는 야근이다 뭐다 하기도 했고 지치기도 했어서 거의 잡지 않고 있던 프로젝트였지만 마음을 다 잡고 다시 개발 재개. 그렇게 어려워했던 롱노트도 의외로 쉽게 넘어가고 있고, 판정과 자잘한 것들만 잡으면 첫번째 목표였던 BM98 수준까지는 거의 도달. 영상에서는 플레이 화면 밖에 없는데, 현재 최종적으로 9월중에 한번 주위사람들과 소박한 베타를 하고 10월 추석기간동안 UI를 좀 더 만들고 몇가지 미완 혹은 BM98에는 없지만 나중에 추가할 기능들은 정리를 하는 작업을 해서 첫 버전을 내놓을 생각이다.
취미생활로 달려왔던 프로젝트이지만 이제 첫단추의 끝이 보이기 시작해서 마감이구나 싶다. 사실 더 하고 싶고 될 것도 같지만 기존처럼 작업한다해도 올해 안에는 릴리즈는 하지 않을 것 같다. 내년엔 이걸 하고 있을지 한다면 얼마나 할지? 궁금하다. 현실이 허락한다면 계속 진행해서 LR2수준까지 끌어올리고 세대교체를 하는 나름 큰? 목표를 가지고 있었다. 조금 더 형편이 좋았다면 더 빨랐겠지만 아쉽게도 그정도는 아니라 아주 천천히 가는걸로. 영상은 차후에 메뉴화면과 다 합쳐서 다시 업로드를 해야 할 것 같다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다