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

게임개발 중급(85) - Monster Killer(47)

by jyppro 2024. 7. 15.

Monster Killer

 

데미지 계산

기존에 데미지를 계산할 때, 무기 공격력과 부위 별 데미지를 합산하는 과정을 거쳤는데, 그 과정이 조금 엉켜있어서 약간의 분리하는 과정을 진행해주었습니다.

데미지 계산

 

아직 완벽하게 개선된 것은 아니지만, 일단 모든 데이터를 관리하는 GameManager에서 damage의 기본값을 가져와 설정해주고, 강화 수치는 currentDamage, 몬스터 부위 별 데미지는 PartsDamage로 나뉘어서 순서대로 합산 시키는 방식을 사용하도록 했습니다.

 

기존에는 데미지가 한가지의 변수로 합쳐지는 방식이라 어떤 데미지가 어디서 사용되는지 구별하기 어려웠지만, 3개로 나뉘어 구별하기 편하게 구성하였습니다.

 

데이터1

 

현재 능력치 설정이 공격력 강화 수치가 100인 상태로 킬러모드에 입장하여 몬스터를 공격하면

 

헤드1몸통1

 

첫번째는 헤드를 맞췄을 때 들어가는 데미지로 30~50 사이의 랜덤한 데미지가 추가로 합산되어 총 100 + 49의 데미지가 들어간 모습입니다. 두번째 이미지는 몸통을 공격했을 때이며, 20~35 사이의 데미지가 랜덤으로 합산되어 100 + 23의 데미지가 들어갔습니다. 이렇게 각 부위 별로 데미지를 추가 계산하도록 해놓았습니다.

 

몬스터 사망처리

몬스터 사망

 

이번에는 몬스터의 사망 처리에 대한 부분입니다. 기존에는 단순하게 몬스터가 죽으면 다음 몬스터를 소환하도록 되어있었는데, 몬스터가 죽는 과정에서 문제가 여러가지 있었습니다. 몬스터의 체력이 전부 깎였지만 몬스터가 죽은 상태에서도 공격이 가능했기 때문에, 몬스터 사망처리가 두 번 되어 몬스터가 두 마리 소환되는 문제가 있었고, 몬스터가 죽는 동안 애니메이션을 실행시키기 위해 바로 없애지 않는데, 그동안 NavMesh를 사용한 MonsterMovement가 계속 실행되어서 죽었는데도 계속 움직이는 문제들이 있었습니다.

 

이를 개선하기 위해 몬스터가 사망하면, 몬스터 하위에 존재하는 모든 콜라이더를 비활성화시키고, MonsterMovement에 StopMoving함수를 만들고 실행시켜 움직임을 멈추도록 해주었습니다. 이렇게 게임을 실행하면

 

사망처리

 

몬스터가 죽었을 때, 움직이지 않으며, 콜리전이 없어서 플레이어가 아무리 공격을 시도해도 공격이 불가능하여 여러번 사망처리가 진행되는 문제를 해결했습니다.

 

<NEXT>

다음에는 드디어 다른 모드를 만들어보겠습니다. 처음으로 만들 모드는 헌트모드(Hunt Mode) 입니다. 다른 모드를 만들기 전에 기존에 생각했던 방식을 어떻게 구현할지 정리를 하는 시간을 갖도록 하겠습니다. 아무래도 프로젝트가 바뀐 내용이 많기 때문에 기존과는 다르게 구현 계획을 설계해야 할 것 같습니다. 그럼 다음에는 모드 구체화를 하는 글로 찾아뵙도록 하겠습니다. 감사합니다.