본문 바로가기

[개발일지11] 노트판정 구현 노트판정은 떨어지는 노트를 보고 키 입력을 해서 누른 타이밍에 따라 판정하는 시스템이다. 판정을 구현하는 방법은 노트와 판정바와의 좌표를 비교하는 것과 노트의 시간값을 비교하는 것이 있다. 또 다른 방법이 있을지 모르겠지만, 나는 노트의 시간값을 토대로 구현하기로 결정했다. 좀 더 정확하게 판정할 수 있을거라고 생각했기 때문이다. 구현 방식을 간략하게 표현해보면 1. 각 레인에 해당하는 노트의 시간값을 큐에 저장. 2. 노트의 시간값(큐의 첫번째 값)과 현재 음악의 시간과 비교하여 판정 차등 부여(미스,굿,그레잇) 3. 판정이 이루어지면 DeQueue 4. 이하 과정 반복 노트 시간값이 담긴 리스트를 큐에 복사. 미스, 굿, 그레잇과 같은 판정이 정확히 어느때 이루어지는지 알 필요가 있다. 미스는 키를 ..
[개발일지10] 키 입력받기 노트를 입력받기에 앞서 키를 누르는 행위를 먼저 구현할 필요가 있다. 판정바 밑에 오브젝트 6개를 만들고 파란색을 부여했다. 이것이 무엇인가 라고 궁금하다면 (정확한 명칭이 있는지 모르겠지만, 여기서는 키 패널이라고 이야기 할 것이다.) 키 패널은 플레이어가 키를 입력했을 때, 대응되는 오브젝트라고 보면 된다. 어느 키를 입력해야 될지 도움을 주기도 하며, 시각적인 효과를 담당하기도 한다. 여러가지 형태의 키패널들이 존재하는데, 평소에는 키패널의 모습이 보이지 않았다가, 키를 누르고 있으면 보이고 떼면 다시 사라지는 형태를 구현하고자 한다. 방법은 간단하다. 키를 입력받는 스크립트를 만들고 각 오브젝트를 불러와 비활성화 시켜둔다. 키를 누르거나 누르고있으면 오브젝트를 활성화 시켜서 모습을 보이게 하고, ..
[개발일지8] 중간 진행 상황 어느정도 리듬게임의 형태가 보이기 시작했으며, 싱크를 좀 더 다듬고 플레이어가 입력해서 점수화하는 기능을 구현할 예정.
[개발일지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. 노트입력 이 것들이 리듬게임 프로그램에 있어서 필수적인 부분이라고 생각 하고 있다. 메트로놈 박자를 맞추기 위해 도움을 주는 장치다. 악기를 다루는 사람이라면 알고있을 것이다. 예전에는 실물 형태의 물건이었지만, 지금은 어플리케이션으로도 쉽게 찾아 볼 수 있다. 이 것이 필요한 이유는, 리듬게임이 실제 악기 연주를 게임에 옮겨 온 것이기 때문이다. 플레이 화면에서 떨어지는 노트는 악보상의 음표를 의미하는 것이라고 보면 된다. 음악과 노트의 싱크를 맞추는데 쓰여질 것이다. 노트파서 리듬게임은 플레이 화면에서 떨어지는 노트들은 언제 어디서 생성되는지 또는 음악의 작곡가,속도등에 대한 ..