현재 개발중인 영상입니다.
다른곳에도 물어봤지만 여기가 꽤 활발한거 같아서 글을 복사하여 물어봅니다.
현재 게임 개발이랑은 연이 없는 회사에서 개발을 하고 있습니다.
이직 준비를 하면서 이것저것 해보자는 마음으로 기존에 관심이 있었던 리듬게임을 개발 포트폴리오로 만들고있습니다.
위의 영상은 5일정도 작업 한 영상인데요, BMS 파일을 마디/라인 별 분석한 자료구조를 만들고 현재까지의 진행된 마디상의 위치에 따라 노트를 생성하여 실행되도록 되어있습니다.
여기서 질문입니다.
1. 상용 리듬게임을 보면 노트가 하단까지 내려올때도 상당히 부드럽게 되어있는데,
제가 만든것 같은 경우는 노트가 내려오는 것을 position 기반으로 하여서 Transform.Translate로 구현하여서 그런지
판정선 직전에서 노트가 사라지면서 처리되는것을 보실 수 있습니다. 그리고 아주 살짝씩 끊겨보이기도 합니다. 60프레임이라기보단 40정도로 보이네요.
(영상에서는 Vector.back * 100 으로 내려가도록 처리되어있습니다.)
이것을 바꾸려고 velocity를 사용해 내려가는 처리도 생각해보았는데 적용시 싱크가 조금씩 어긋나는 문제가 있었습니다.
특히 bpm 변동에 의한 변속이 일어나는 경우는 더 그렇습니다. (사실 지금도 싱크가 완전하지는 않습니다만 어느정도의 재생은 문제 없습니다.)
실제 노래와의 싱크를 정확히 맞추는 방법이 없을까요?
2. BMS에는 배경음 역시 키음으로 같이 처리하는 경우가 많습니다. 다양한 난이도의 보면을 만들 때 쉽게 만들기 위해서지요.
예를 들어 아래와 같은 그림으로 구성되어있습니다.
초록색 부분을 제외하면 모두 키음이 들어갈 수 있는 부분입니다. (오른쪽의 빨간부분은 최대 32개의 채널을 사용하여 최대 동시 재생 가능 채널수는 40입니다)
저는 이 음원들을 처리할 수 있도록 각각의 라인에 AudioSource를 동적으로 생성하여 처리하고 있습니다.
(맨 처음 bms 파일을 읽어올때 필요한 개수의 AudioSource 배열을 만들어둡니다)
음원들은 AudioClip의 형태로 파일을 불러올 때 미리 로드시켜둔 채로 Dictionary에 저장합니다.
그리고 재생시에는 바로 다음에 오는 노트의 소리도 처리할 수가 있도록 PlayOneShot에 파라미터로 미리 저장해둔 AudioClip을 가져옵니다.
문제는 동시에 처리하는 노트의 개수가 일정수를 넘어가면 음악이 재생되지 않고 딜레이가 발생하는 문제가 있습니다.
그래서 소리가 뭉개진 후 다음 노트가 진행되며 소리가 납니다.
소리가 생명인 리듬게임상 모든 음이 정상적으로 재생되게 하고싶은데 AudioSource로는 해결할 방법이 없을까요?
아님 외부 라이브러리를 사용해야 할까요?
감사합니다.
안뇽 bms 파싱 한다는 글 오랜만에 보는거 같네 내가 코코스2dx로 작업할때 기본 오디오엔진으론 커버가 안되길레 fmod라는 외부 라이브러리를 참조해서 사용 했었다 아마 유니티에도 올릴수 있을거라고 생각되고
유니티로는 작업을 안해봐서 모르겠는데 리겜이면 프레임을 고정시키는걸 추천함 난 60fps로 고정시키고 작업했음
https://github.com/darkcl/CCBeat/tree/master/Classes
유니티 문법이랑은 다르겠지만 참고하면서 작업해
감사합니다. 다행히 이전에 코코스를 잠시 써본적이 있어 좋은 참고가 될 것 같습니다.
판정선관련해서는 보통 리듬게임이 다 그렇듯이 판정선에서 사라지지않고 그 밑까지 더 내려감. 그래서 걍 사라지는 위치만 더 내리면 돼.