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

게임개발 중급(104) - Monster Killer(66)

by jyppro 2024. 11. 10.

Monster Killer

안녕하세요 오늘도 버그 수정에 대한 이야기를 들고 왔습니다. 오늘은 가볍게 발생했던 여러 가지 버그에 대해서 말씀드려보겠습니다.

 

버그 수정 - 헌트모드 목표 마리 수 표시

이번에도 헌트모드에서 발생한 버그 입니다. 이 버그는 헌트모드에서 간단한 숫자로 목표 마리 수를 표시하고, 현재 처치 마리 수를 동시에 표시하도록 하는데, 에디터에서는 잘 실행이 되었는데 실제로 빌드하고 테스트를 할 때 표시가 되지 않았던 문제입니다.

 

이 문제 같은 경우는 단순했지만, 왜 문제가 발생하는 지 찾기 매우 어려웠습니다. 에디터에서는 아무 문제가 없었기 때문입니다. 하지만 테스트를 거치면서 숫자가 표시는 안되지만, 데이터는 들어가 있어서 처치 수에 따른 클리어 처리가 정상적으로 작동했기 때문에 실행시간에 차이 때문에 단순히 표시가 되지 않는다는 것을 알아챘습니다.

 

기본적으로 DisplayGoal 소스코드에서 MonsterSpawner에 설정된 목표 마리수와 현재 마리수를 가져와서 표시를 해주는 데, 이 부분에서 실행시간의 차이가 발생했습니다. 왜냐하면 MonsterSpawner도 온전하게 데이터를 가진 상태에서 시작하는 게 아닌, GameManager에 세팅 되어 있는 값에서 가져와 넘겨주기 때문입니다.

 

값-받아오기

 

결국, 게임 매니저에서 값을 받아올 때, Start로 처리하던 LoadStageData를 Awake로 실행하도록 변경하니, 빌드된 실행파일에서도 제대로 작동하는 것을 확인할 수 있었습니다.

 

버그수정 - 사운드

다음은 사운드 관련 버그입니다. 사실 사운드는 초반에 설정 창에서 사운드 바를 만든 이후로 거의 확인을 하지 않았었는데, 최종 테스트를 위해 사운드 체크를 하던 중 이상한 점을 발견했습니다.

 

첫번째로, 사운드를 줄여놓고 씬을 이동한 뒤 다시 메인 씬으로 돌아와서 설정 창을 열면 기존에 줄여놨던 사운드가 다시 원상복귀 되는 버그, 두번째로는 음소거 버튼을 만들었었는데, 음소거 버튼 클릭 후에 사운드 바를 조정할 수 있고, 아이콘은 그대로 음소거 상태인 버그가 있었습니다.

 

이 버그는 사실 그리 어려운 버그는 아니었습니다. 첫번째는 Start에서 설정 창을 열 때 사운드를 초기값으로 초기화하도록 해놨기 때문에 발생한 버그라서 해당 초기화를 삭제하여 해결했습니다.

두번째는 단순히 음소거 버튼을 만들면서 놓친 사항이라 새롭게 예외사항을 추가하게 되었는데, 그 과정에서 사운드 바와 연동이 필요했습니다.

 

기존에는 단순히 음소거 버튼을 클릭하면, 사운드 바를 최소로 만들고, 사운드 볼륨을 0으로 만들기만 했기 때문에 사운드 바를 통해 다시 볼륨을 올리면 음소거 상태임에도 소리가 들렸습니다. 그래서 저는 음소거 상태일 때에는 사운드 바를 컨트롤 할 수 없도록 막고, 버튼으로만 컨트롤 할 수 있도록 했습니다.

 

음소거

 

코드가 생각보다 길어졌는데, 버튼 클릭 시, 뮤트 상태인지 체크하고 뮤트상태라면 음소거를 해제, 아니면 음소거를 시킵니다. 동시에 뮤트 상태를 변경시켜주고, 버튼의 이미지를 변경하며 슬라이더를 비활성/활성 됩니다. 그리고 사운드도 마찬가지로 PlayerPrefs를 통해 GameManager에서 개인 데이터로 관리하기 때문에 뮤트 상태 또한 저장시켜 줍니다.

 

버그 수정 - 페이지 중복 오픈

메인씬

 

마지막으로 사소한 버그 하나 하고 끝내겠습니다. 메인 씬에 보면, 다양한 버튼을 통해 열 수 있는 페이지들이 존재합니다. 그런데 이 버튼을 통해 페이지를 열 때, 겹쳐서 열리는 것을 미처 생각하지 못했습니다. 그리고 다시 살펴보니 이 부분은 과거에 혼자 게임을 만들 때 만들어둔 기본 기능이라 완전히 하드 코딩되어 있어서 각 버튼 별로 같은 기능임에도 불구하고 소스코드가 여러 개가 존재하고 있었습니다. 그래서 이 부분은 한 페이지가 열려있는 상태에서 다른 페이지를 연다면 기존에 열려있던 페이지를 닫고, 새로운 페이지를 열도록 변경하였습니다.

 

오픈

 

매니저

 

소스코드는 진짜 별거 없습니다. 페이지를 할당하고 매니저를 통해서 열고 닫고만 해주기 때문에 간단하게 만들 수 있었습니다. 이전에 하던 방식도 보여드리겠습니다.

 

과거의-잔재

 

이것이 깃허브 히스토리에 남아있는 과거의 잔재들입니다... 지금 생각해보면 왜 이렇게 했는지 정말 모르겠는데, 아마 다른 방법을 몰라서 그랬을 것입니다. 심지어 이때는 이렇게 많은 코드를 사용하고도, 다른 페이지와 중복 오픈 처리도 되어 있지 않았다는 것입니다.

 

<NEXT>

이렇게 자잘한 오류 수정 사항에 대해서 알아보았습니다. 내일은 조금 큼지막한 오류 하나에 대해서 이야기 해보도록 하겠습니다. 감사합니다.