본문 바로가기

유니티/리듬게임

[개발일지5] 노트파서

노트파서

 

화면에 표시되는 음악의 제목, 작곡자, BPM, 박자, 노트 오브젝트들의 데이터를 텍스트 파일에 기술하게 된다.

기술을 아무렇게나 해서는 안되고 형식이 있어야 한다.

 

예시로 BMS 파일을 가져왔다.

 

곡에 필요한 데이터들이 기술되어 있는 것을 확인할 수 있다.

이러한 데이터들을 한줄씩 읽어 필요한 것을 프로그램에 저장해주면 파서의 역할은 끝이다.

 

사실 BMS를 그대로 따라갈 수도 있겠지만 큰 의미를 갖기는 힘들다.

앞으로 똑같은 리듬게임을 만들 것도 아니고, 새로운 방식의 리듬게임을 만들게 되었을 때

적절한 형식의 스크립트가 필요하게 될 것이다.

그래서, 직접 형식을 구성해보기로 하였다.

 

직접 구성해본 데이터 형식

osu! 라는 리듬게임의 데이터 형식(osz)을 참고했다.

사실상, 기술한 데이터가 몇개 빠졌을뿐 osz나 다름없다고 볼 수 있다.

 

각 요소에 대해 설명하자면,

[SheetInfo] : 곡의 필수 데이터를 담고있다.

다른 항목은 없어도 게임은 돌아가지만, 이 항목의 데이터가 없으면 게임을 진행할 수 가 없다.

 

[ContentInfo] : 곡의 제목, 작곡가등 데이터를 담고있다.

 

[NoteInfo] : SheetInfo만큼이나 중요하다고 볼 수 있다. 떨어지는 노트의 데이터를 담고 있다.

4개의 구분자(,)로 데이터가 나뉘어져 있는데

노트의 x좌표, y좌표, 노트의 시간, 노트의 종류, 롱노트시간 순으로 기술하게 된다.

 

1,0,250,1,0 를 해석해보면

x좌표가 1이고 노트시간이 250, 노트종류는 숏노트.

 

이제, 이 데이터들을 프로그램에서 사용할 수 있게, 저장(메모리)해야한다.

 

SheetParser.cs

 

SheetParser.cs 에서 노트의 데이터가 담긴 텍스트 파일을 한줄씩 읽어, 필요한 부분의 데이터를 구분해 변수나 list와 같은 컬렉션에 저장하게 된다.

 

파싱 결과(일부만 확인)

파싱이 잘 되어지는 것을 확인할 수 있다.