유니티 (50) 썸네일형 리스트형 [개발일지13] 점수 간단하게, 점수 부여하는 메소드를 만들었다. Judgement.cs 에서 미스판정이 발생하면 Score.cs에서 처리하는 방식이다. 추후, 구체적인 점수 시스템이 확립되면 바뀔 예정. [개발일지12] 노트판정 재설계 노트 판정을 구현하고 나서 QA를 열심히 해보는 중에, 문제가 있음을 발견했다. 분명 판정자체는 제대로 이루어지고 있었으나, 의도했던 특정상황의 판정이 전혀 발동하지 않았던 것이다. 예를들면 그레잇이 0.2초 굿이 0.5초 설정이 되어있다고 가정했을 때 + 0.5초에 눌러도 그레잇으로 판정이 되어버린 것이다. (- 상황에서는 굿이 제대로 적용되었다.) 이렇게 되면 플레이어가 막누른다는 가정하에 그레잇을 모조리 가져가게 될 것이다. 추가로, 막눌러도 점수를 얻어가지 못하게 하기 위해 추가 범위를 잡았다. (사실, 처음 코드를 짤때부터 염두했었던 상황인데 너무 빠르게 만든나머지 깜빡했었다.) 이제 정말 제대로 작동한다! 간접미스 추가는 기획에서 잡아야 될 것이다. 간접미스를 간략하게 설명하면 1번노트를 치기.. [개발일지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나 다.. 이전 1 ··· 3 4 5 6 7 다음