본문 바로가기
게임 프로그래밍/게임개발 중급

게임개발 중급(103) - Monster Killer(65)

by jyppro 2024. 11. 9.

Monster Killer

안녕하세요 오늘부터는 그동안 개발하면서 발생했던 크고 작은 버그와 해결 과정에 대해서 자세하게 풀어보도록 하겠습니다. 사실 전부 기억나는 것은 아니지만, 크게 기억나는 것으로 적어보겠습니다.

 

버그수정 - 스테이지 클리어

지금 당장 기억나는 버그는 스테이지 클리어에 관련된 버그입니다. 처음 클리어 판정을 통해 클리어 페이지를 띄우고 홈 혹은 다음 스테이지 버튼을 통해 씬 전환을 하는 것은 문제가 없었습니다. 하지만 헌트모드에서 문제가 발생한다는 것을 인지하기 시작했습니다.

 

발생한 문제

헌트모드에서 발생한 문제는 클리어 판정에 있었습니다. 헌트모드는 목표 처치 마리 수가 정해져있고, 해당 마리 수 만큼 몬스터를 처치하면 클리어 페이지가 뜨도록 만들었습니다. 그런데 클리어 페이지를 띄울 때, 게임을 멈추도록 설정을 해놓았는데 여러 번 테스트를 해보니 어쩔때는 문제가 없었지만, 가끔 클리어 페이지가 뜨고 버튼 클릭이 안되고 화면이 멈춰버리는 상황이 발생했습니다.

 

문제 파악

이 문제가 왜 발생하는 것인지 테스트 플레이를 여러 번 거치면서 알게 되었습니다. 헌트모드 특성상 몬스터가 목표 마리 수보다 많이 처치 될 가능성이 높은데, 그 이유는 기존에 폭탄 무기만 사용하면 여러 마리를 공격할 수 없으니 많아봤자 1~2마리 씩 처치해야 했는데 스킬이 생기고 나서부터는 한번에 10마리도 넘게 몰이 사냥을 할 수 있다보니 목표 마리 수를 클리어 타이밍에 넘기기 쉬워지면서 문제가 자주 발생하게 된 것입니다.

 

헌트모드-문제발생
이 상태에서 X스킬 사용 시 처치 마리 수를 쉽게 넘길 수 있음

 

예를 들어, 클리어 판정을 25마리 이상 처치되면 클리어 페이지가 뜨도록 코드를 작성하였다면, 25마리 째에서 판정되어 클리어 페이지가 뜨면서 게임이 멈추는데, 이렇게만 되면 UI 버튼은 클릭이 가능하여 문제가 없지만, 버튼을 클릭하면 씬 전환을 위해 TimeScale로 멈춰놓은 게임 시간이 흐르기 시작하고, 그 타이밍에 만약 남아있는 몬스터가 처치판정이 된다면 26마리가 처치되어서 다시 한번 클리어 페이지의 조건을 만족시켜 게임을 멈추게 만든 것입니다. 이런 경우는 마법 스킬 사용 시에 쉽게 발생합니다.

 

문제 해결 시도

처음에는 타임 스케일과 몬스터 마리 수에 집착하며 문제를 해결하려 했지만, 소용이 없었습니다. 그러던 중 같이 프로젝트를 테스트하던 팀원 중 한 명이 좋은 아이디어를 제시해주었습니다. 바로 몬스터가 목표 이상 만큼의 처치가 결국 문제니까 목표를 달성하면 필드에 몬스터를 전부 제거하는 게 어떻냐는 것이었습니다.

 

저는 매우 좋은 생각이라고 느꼈고, 곧바로 실행에 옮겼습니다. 목표 마리 수 이상 처치되면 현재 소환된 모든 몬스터를 없애고, 추가적으로 현재 처치 마리 수를 목표 마리 수와 같은 값이 되도록 만들어 주었습니다. 결과는 매우 긍정적이었습니다. 여러 번 테스트를 해도 이제 클리어 페이지가 한번만 등장하며 멈추는 현상도 등장하지 않았습니다.

 

문제-해결1단계
목표를 넘길 시 마리 수 고정 및 필드 위 몬스터 제거(해결?)

 

하지만, 아직 문제가 하나 더 남아있었습니다. 정~~말 낮은 확률로 클리어 후 버튼을 클릭하여 다음 씬으로 넘어가는 타이밍에 새로운 몬스터가 소환되고 그 몬스터가 처치되는 경우 입니다. 필드 위 몬스터가 없어서 클리어 후 판정이 되지 않도록 한 것인데 소환은 막지 않아서 발생하는 문제입니다.

 

문제 해결

문제해결

 

최종적으로 몬스터 스포너에서 다음과 같은 코드를 통해 몬스터 처치시 목표 마리 수를 넘어가면 소환을 중단시키고, 목표와 현재 마리 수를 같게 맞춰준 다음, 필드 위에 모든 몬스터를 제거하여 문제를 해결하였습니다. 그리고 보시면 코루틴에서 0.1초의 대기시간을 가지고 실행하는 것을 볼 수 있는데, 즉시 실행하면 판정 타이밍에 문제가 생길 수도 있기 때문에 모든 문제 발생 원인을 배제시키고자 대기시간을 넣어주었습니다.

 

<NEXT>

다음에도 버그 수정에 대한 이야기를 들고 오겠습니다. 감사합니다.