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

게임개발 중급(106) - Monster Killer(68)

by jyppro 2024. 11. 12.

Monster Killer

저번 글과 이어서 작성하겠습니다. 

 

버그 수정 - 공격속도 복사

저번에 간단하게 Z스킬과 무기 변경 및 소환에서 발생하는 버그에 대해서 알아보았습니다. 그런데 제가 쓴 글을 다시 확인해보니 급하게 작성하느라 왜 공격속도가 복사되는지 자세한 설명이 생략되어 있었습니다. 그 부분을 한번 짚고 다음으로 넘어가도록 하겠습니다.

 

이전에 Z스킬을 사용할 때와 기본적인 무기 매커니즘 양쪽에서 무기 소환을 진행하기 때문에 문제가 된다고 했습니다. 이 부분을 좀 더 자세히 이야기 하면 일반적으로 마우스 클릭을 통해 공격을 진행할 때에는 문제가 발생하지 않습니다. 기존에 설정해둔 속도로 무기가 재생성 되기 때문입니다. 그런데 문제는 Z스킬을 사용할 타이밍과 Z스킬의 지속시간이 끝날 때쯤에 마우스 클릭을 빠르게 연속으로 시도하면 발생합니다.

 

이제 다시 문제로 돌아가서 해결하기 위해 시도한 내용을 살펴보겠습니다.

 

문제 해결 과정

이전 글에서 말했듯이, 이 문제는 무기 소환에 의해서 발생한다는 사실을 확인했습니다. 그 상태에서 저는 두가지 방식을 선택해야 했는데 Z스킬을 누르는 즉시 현재 무기를 바꾸는 방식을 채택하면 공격속도 버그가 남아있었고, Z스킬을 누르면 다음 무기부터 바뀌는 방식을 채택하면 공격속도 버그가 나타나지 않았습니다. 하지만 저는 전자를 선택하고 싶었는데 그 이유는 가장 자연스럽기도 하고, 두번째 방식은 악용할 수 있는 가능성이 농후했기 때문입니다. 특히 하나의 경우를 뽑자면 Z스킬을 누른 뒤, 5초간 변경된 무기가 지속되고 이후엔 사라지는데, 첫번째 방식은 강제로 무기가 바뀌지만, 두번째 방식에는 무기를 사용한 뒤에 바뀌다 보니까 마지막 변경 무기를 사용하지 않고 기다렸다가 다음 Z스킬을 누르면 무한으로 스킬 무기를 유지할 수 있습니다. 그렇게 첫번째 방식인 스킬 사용 즉시 무기 변경을 채택하기로 정했고, 그 상황에서 공격속도가 복사되는 버그를 해결하기 위해 다양한 시도를 했습니다.

 

처음 시도했던 건 기존 무기 소환과 Z스킬의 무기 소환이 겹치는 게 문제라고 생각해서 플래그를 사용해 Z스킬 사용 시 기존 무기 소환을 막으려고 했지만, 해결되지 않았습니다. 다음에는 소환하지 않고 CurrentWeapon에 직접 넣어주는 방법을 사용해 봤지만, 그렇게 하면 클릭을 통해 무기를 던지는 기능이 제대로 작동하지 않았습니다.

 

문제 해결

그렇게 여러 시도를 하던 중, 쉽게 해결되지 않자 뭔가 다른 문제가 있다는 것을 알게 되었고, 결국에는 문제의 원인을 찾았습니다. 일단 소환이 문제가 되는 것은 맞았지만, 중요한 건 타이밍이었습니다. 공격 연타 시 공격 속도 복사버그가 발생하던 이유는 공격을 실행하여 CurrentWeapon에서 무기가 없어지는 타이밍에 무기가 원래대로 돌아가거나, Z스킬을 통해 무기가 변경되는 것처럼 강제로 무기가 변경되면서 소환되면 소환이 겹쳐 남아있게 되는 것이 문제였습니다.

 

던지기처리

 

기존에도 무기를 던질 때 canGenerate 플래그를 통해 무기가 소환될 수 있는지 체크하고 있었지만, 무기를 던지고 다시 무기가 소환되기 이전 사이에 간극을 채워 줄 플래그가 하나 더 필요했습니다. 그래서 isThrowing을 통해 던질 때 플래그를 세워줍니다.

 

추가로 플레이어 컨트롤러에서 스킬 사용에 대한 정의를 해두었기 때문에 플레이어 컨트롤러에서 canGenerate 플래그를 사용할 수 있도록 연결해줍니다.

 

무기스왑

 

결국 Z스킬과 WeaponGenerator 두 부분에서 무기를 생성하는 것에 대한 컨트롤을 동시에 진행하는 것이 관건이기 때문에 Z스킬을 통해 무기가 변경되어 있다는 상태 체크도 동시에 진행해주었습니다. 이렇게 하니 광클하면 무기 생성이 복사되는 현상을 막을 수 있었습니다.

 

<NEXT>

이렇게 무기 생성 및 스킬 사용 그리고 공격속도 복사에 대한 버그를 해결하는 과정을 알아보았습니다. 다음에는 다시 가벼웠던 버그에 대해서 말하는 시간을 가져보겠습니다. 감사합니다.