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

게임개발 중급(39) - 3D 밤송이게임 커스터마이징<Monster Killer>(1)

by jyppro 2023. 5. 31.

3D 밤송이게임 커스터마이징<Monster Killer>(1)

이전 시간까지의 총정리를 끝으로, 밤송이 게임 예제는 마무리를 하였습니다. 하지만, 이 예제를 본인이 만들고 싶은 입맛대로 바꾸고 활용하여 내가 만들고 싶은 게임으로 만들어보는 과정에 대해 알아보겠습니다. 시작하기 전에, 꼭 제가 만드는 것과 똑같이 만들 필요가 없고 본인이 원하는 게임의 방향대로 만드셔도 상관없습니다.

 

<Monster Killer>

제가 만들려고 하는 것은 Monster Killer 라고 이름붙인 게임입니다. 구상한 게임 방식은 간단합니다. 이전에 밤송이 게임에선 과녘에 맞춰서 점수를 얻는 방식이었지만, 맞추는 대상을 몬스터로 바꾸고, 점수대신 체력바를 만들어줍니다. 그리고 몬스터를 잡으면 다음 스테이지로 넘어가 더 강력한 몬스터를 만날 수 있도록 해줍니다. 여기서부터는 레벨디자인 및 추가적인 게임의 구성요소가 요구됩니다. 예를 들어 UI/UX, 시스템, 재화 등등 게임의 모습을 제대로 갖추기 위해선 필요한 것이 많습니다. 처음부터 차근차근 만들어 나가 보겠습니다.

 

몬스터 생성

타겟을 대체할 몬스터 오브젝트가 필요합니다. 저는 에셋스토어에 무료로 구매할 수 있는 Dragon for Boss Monster : PBR 이란 에셋을 구매해 사용하도록 하겠습니다.

사용한-에셋
사용한 에셋

해당 에셋을 다운받은 뒤, 프리팹으로 만들어져 있는 드래곤 중 하나를 씬에 배치해 주겠습니다.

배치된-씬의-모습
배치한 씬의 모습

몬스터가 배치되었습니다. 이제 이 몬스터 오브젝트가 타겟의 역할을 대신할 수 있도록 연결해주겠습니다. 마찬가지로 콜라이더를 적용시켜 주고, 스크립트에서 CompareTag로 타겟을 처리하던 것을 새로 Monster 태그를 만들어 바꾸어 줍니다.

if (collision.gameObject.tag == "Monster") //몬스터와 충돌하는 경우 점수 상승
        {
            BamGenerator.GetComponent<BamsongiGenerator>().ScorePlus(n);
        }
        else if((collision.gameObject.tag == "terrain")) //바닥과 충돌하는 경우 삭제
        {
            Destroy(gameObject);
        }

이렇게 하면 이전과 같이 몬스터와 충돌할 때 점수가 올라가게 됩니다. 하지만, 제대로 된 부위별 점수 시스템을 구현하려면 디스턴스를 다시 배치해 주어야 합니다. 저는 머리부분에 디스턴스 오브젝트를 배치하여 높은 점수를 주도록 하겠습니다. 일단 이렇게 두고 플레이 해보겠습니다.

 

문제-발생
문제 발생

게임을 플레이 해보니 문제가 발생했습니다. 계속해서 밤송이를 던져 피를 깎아야하는데 밤송이끼리 겹쳐 몬스터에게 닿지 않습니다. 이러한 문제를 해결하고자 몬스터에게 닿았을 때에도 오브젝트가 디스트로이 되도록 만들어 주겠습니다. 그러면 결국 어디에 닿아도 디스트로이 되기 때문에 터레인은 따로 처리해줄 필요가 없어집니다.

if (collision.gameObject.tag == "Monster") //몬스터와 충돌하는 경우 점수 상승
        {
            BamGenerator.GetComponent<BamsongiGenerator>().ScorePlus(n);
            Destroy(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }

코드를 이렇게 변경해줍니다. 이제 실행해보면..

 

문제-해결
문제 해결

밤송이를 계속 날려도 남아있지 않고, 점수는 계속해서 올라갑니다.

 

<NEXT>

다음부터는 이 Monster Killer 라는 이름으로 찾아뵙겠습니다. 이번에는 에셋을 활용한 몬스터 배치 및 점수 적용까지 하였습니다. 내일은 플레이어의 시점이동 및 부위별 데미지 세분화를 진행해보겠습니다. 감사합니다.