본문 바로가기

유니티/리듬게임

(29)
[개발일지7] 메트로놈 재설계 노트를 생성을 하고, 음악을 넣고 메트로놈 소리도 함께 들었는데, 처음에는 별다른 이상이 없었다. 하지만 음악이 진행되면 될수록 음악의 박자와 메트로놈의 박자가 어긋나는 것이다. 음악이 라이브 연주였다면 "세션이 박자 실수를 했나" 라고 생각할 수도 있지만 컴퓨터로 작업된 mp3 음악파일이였기 때문에, 나의 메트로놈 시스템에 문제가 있다고 볼 수 밖에 없었다. 문제는 유니티 내부 시간의 문제였다. 유니티는 시간을 Time 클래스로 관리를 하게 되는데, Update 메소드안에서 돌아가기 때문에 fps 에 영향을 받는 것이였다. fps가 높으면 그만큼 자주 호출되어 시간이 빨라질 것이며, 느리다면 그 반대일 것이다. 이러한 이유 때문에 유니티에서 deltaTime 이라던가 fixed, smooth와 같은 f..
[개발일지6] 노트생성 노트 파싱을 통해 데이터를 불러왔으니, 노트를 떨어트릴일이 남았다. 구조는 이러하다. 노트 객체에는 파싱을 통해 알게된, 노트의 좌표, 노트의 시간값등을 저장하는 변수나 컬렉션이 있고 노트를 아래로 움직이게 하는 메소드 또한 존재한다. 바 객체에는 노트 객체와 마찬가지로 바의 갯수가 변수로 저장되어지고, 아래로 움직이게 하는 메소드가 있다. 이 객체들을 제네레이터에 넣고 화면에 뿌려주기만 하면 끝이다. 단순히 뿌려주기만 해서는 안되고, 파싱을 통해 불러온 데이터를 보정하는 작업이 필요하다. 정상적으로 노트와 바가 생성되어 아래 판정선(가장 두꺼운 하얀색의 막대)를 향해 내려가고, 닿으면 없어진다.
[개발일지5] 노트파서 노트파서 화면에 표시되는 음악의 제목, 작곡자, BPM, 박자, 노트 오브젝트들의 데이터를 텍스트 파일에 기술하게 된다. 기술을 아무렇게나 해서는 안되고 형식이 있어야 한다. 예시로 BMS 파일을 가져왔다. 곡에 필요한 데이터들이 기술되어 있는 것을 확인할 수 있다. 이러한 데이터들을 한줄씩 읽어 필요한 것을 프로그램에 저장해주면 파서의 역할은 끝이다. 사실 BMS를 그대로 따라갈 수도 있겠지만 큰 의미를 갖기는 힘들다. 앞으로 똑같은 리듬게임을 만들 것도 아니고, 새로운 방식의 리듬게임을 만들게 되었을 때 적절한 형식의 스크립트가 필요하게 될 것이다. 그래서, 직접 형식을 구성해보기로 하였다. osu! 라는 리듬게임의 데이터 형식(osz)을 참고했다. 사실상, 기술한 데이터가 몇개 빠졌을뿐 osz나 다..
[개발일지4] 메트로놈 메트로놈 제작에 앞서 BPM에 대한 이해가 필요하다. Beats Per Minute의 약자인데 음악의 속도를 숫자로 표현한 것이다. 영어단어에서 알 수 있듯이, 속도의 기준은 1분(60초)이다. BPM이 60인 음악은 4/4 박자 기준 60개의 4분음표를 가진다. 반대로 1초에 4분음표 한개라고도 볼 수 있다. 그렇다면, 메트로놈에 60을 입력하면 1초에 한번씩 소리가 출력되어야 한다. 이 것을 수식으로 나타낼 수 있다. ( 60 / BPM ) * ( Tempo / Tempo2 ) BPM은 해당 음악의 속도 Tempo에는 해당 음악의 박자표(4/4, 3/4, 6/8 등)를 입력 받으면 된다. 예시로 BPM에 60, 박자표에 4/4를 입력하고 계산하면 1이란 값이 나온다. (60 / 60) * (4 / 4..
[개발일지3] 리듬게임 시스템 설계 틀이 완벽하게 잡히진 않았지만, 리듬게임에서 쓰이는 공통적인 부분들이 있다. 1. 메트로놈 2. 노트파서 3. 노트생성 4. 노트입력 이 것들이 리듬게임 프로그램에 있어서 필수적인 부분이라고 생각 하고 있다. 메트로놈 박자를 맞추기 위해 도움을 주는 장치다. 악기를 다루는 사람이라면 알고있을 것이다. 예전에는 실물 형태의 물건이었지만, 지금은 어플리케이션으로도 쉽게 찾아 볼 수 있다. 이 것이 필요한 이유는, 리듬게임이 실제 악기 연주를 게임에 옮겨 온 것이기 때문이다. 플레이 화면에서 떨어지는 노트는 악보상의 음표를 의미하는 것이라고 보면 된다. 음악과 노트의 싱크를 맞추는데 쓰여질 것이다. 노트파서 리듬게임은 플레이 화면에서 떨어지는 노트들은 언제 어디서 생성되는지 또는 음악의 작곡가,속도등에 대한 ..