프로젝트/리듬게임 프로젝트

[리듬게임 프로젝트 #0] 프로젝트 롤백 결정

ayuriK152 2023. 5. 27. 01:01

 기존에 유니티 엔진 독학을 하며 습득한 지식으로 뭘 만들어볼까 고민하던 중에 자주하는 리듬게임을 만들어보고 싶다는 생각이 문득 들었다. 더 망설일 필요도 없이 나는 바로 프로젝트 진행에 착수했고 작업 진행은 순조로워 보였고, 얼마 전까지도 그랬다.

문제의 시작

 문제가 발생하기 시작한건 롱노트를 추가하기 시작하면서 부터였다. 이미 시중에 나와있는 여타 리듬게임들처럼 내가 직접 패턴을 만들고싶은 마음도 강했고, 패턴 에디터를 먼저 만들기 시작했다. 에디터의 구조는 마디 단위로 이루어져 있으며, 마디마다 노트가 미리 배정되어있어 누르면 활성화되는 방식으로 구현했었다.

 노래 길이에 상관 없이 패턴을 만드는 사람이 필요할 때마다 직접 마디를 추가해가며 패턴을 완성시키는 방식이고, 오른쪽의 박자부분을 선택해서 1, 2, 4, 8, 16분음표의 간격으로 노트를 입력할 수 있게 설정했다. 노트는 이미 각 마디마다 생성이 되어있는 상태고, 사용자가 이를 눌러서 활성화시키면 입력되는 방식이다.

 

 그럼 롱노트는? 기본적인 노트의 경우 데이터에 눌렀을 때의 판정 타이밍만 추가했지만, 롱노트의 경우는 지속적으로 버튼을 누르고 있음을 감지해야하므로 롱노트가 끝나는 순간의 타이밍 또한 데이터에 있어야 한다. 물론 이것을 에디터에서도 명시적으로 보여줄 수 있어야하며, 시작점과 끝점을 있는 선 같은 것으로 표현이 가능할 것이다.

 

 하지만 기존의 에디터 구조는 지나치게 일반 노트의 입력에 최적화되어 있었다. 에디터에서 사용할 용도로 따로 만든 노트 객체를 각 마디에 미리 생성해둔다는 것 자체가 문제였던 것이다. 일반 노트의 경우 끝나는 점이 따로 존재하지 않기 때문에 미리 노트를 생성해두고 활성화시키는 방법이 문제가 되지 않을 수 있지만 롱노트의 경우 곡의 길이에 따라 경우의 수가 무한정으로 늘어난다.

 

 해당 에디터는 16박자까지 편집을 지원하도록 설계되었는데, 가령 마디가 150개로 이루어진 채보를 만든다고 생각해보자. 한 개의 시작지점에서 출발한 롱노트가 도착할 수 있는 지점은 16 * 150 - 1개고, 4키이므로 또 4배가 된다. 경우의 수가 천문학적으로 많지는 않지만, 마디를 추가할 때마다 롱노트를 미리 생성해야하는가? 그게 아니라면 이미 생성된 노트들끼리 묶는 방식을 생각해볼 수 있지만 그 경우에는 롱노트 객체를 따로 만들어야하는가? 상속을 하는건 정말 아닌 것 같은데 그럼 그 변수들이며 메소드들을 전부 다 다시 정의해야하고.. 시작점 종료점 사이에 있는 노트는 접근 불가능하게 만들어야하는데 이걸 구현하려면 또 변수선언을 해서 체크를 해야하고..

 

 애초에 처음 에디터의 설계를 제대로 하지 않은채로 프로젝트를 진행했고, 때문에 당장 구현해야하는 단타 노트만을 생각한 채로 뼈대를 갖추어 나가다보니 이런 문제가 발생해버렸다. 아무래도 이 프로젝트는 단타 노트만을 지원하는 리듬게임으로 완성시키거나 그게 아니라면.. 아예 처음부터 설계를 다시해야할 것 같다. 애초에 기본적인 노트의 상속관계부터 생각해야되는건지.. 아직은 머리가 복잡하다.

 

 그래도 이번 기회에 설계의 중요성을 알게 되었고, 단순히 게임을 많이 한다고 해서 해당 장르의 전문가가 될 수는 없다는 뼈아픈 교훈을 다시 한 번 얻게 되었으니 다행이라고 생각하자.........,.,.,