UNITY 게임 개발

Stella Kim·2021년 7월 16일
0

GUI Programming

목록 보기
1/1
post-thumbnail

개발 배경

GUI 프로그래밍에 대해 공부하며 win32, MFC, C# 그리고 PyQt 까지 다양한 언어들을 가지고 간단한 예제들을 직접 구현해왔었다. 공부를 해오며 C#과 PyQt의 편리함에 종종 감탄했었기에 이 둘 중 하나의 언어로 프로젝트를 진행해보아야겠다고 어렴풋이 생각해왔었다. C#을 사용하기로 결정한 후 어떤 프로그램을 만들지 구상하던 도중, C#이 게임엔진개발 툴인 UNITY에서 기본 언어로 사용된다고 어디선가 스쳐지나가듯 본 게 생각났다. 평소에 게임을 좋아하는 것도 아니고, 무엇보다 UNITY를 다뤄본 적이 없었기에 처음엔 너무 무모한 도전인 게 아닐까 생각했다. 하지만 새로운 개발 도구로 그동안 해왔던 실습과는 완전히 다른 내용을 구현해보고 싶었다. UNITY로 프로젝트를 수행하기로 결심한 순간 구현할 내용에 대해서는 어느 정도 답이 나왔다고 볼 수밖에 없었다. 대표적인 게임엔진개발 도구인 만큼, ‘게임’으로 개발하고자 하는 내용의 범위를 좁힌 후 입문자 수준에서 구현할 수 있을 정도의 내용으로 게임의 시나리오를 구상하였다. 그리고 짧은 기간 내에 노 베이스에서부터 시작하여 어느 정도 완성도 있는 게임을 구현해야 했기에 밤낮을 가리지 않고 UNITY에 관해 공부하고 본격적인 프로그램을 개발했다.

유사 프로그램 또는 관련 기술

게임 자체는 특별하지 않다. 많이 접해보았을 법한 게임들의 규칙들을 통합하여 말 그대로 ‘나만의 게임’을 만들었다. 유사 프로그램은 찾아보면 셀 수 없이 많기에 게임에 적용한 규칙 및 기술에 대해 하나씩 소개하겠다. 개발한 게임의 큰 틀은 포털사이트의 플래시 게임에서 흔히 볼 수 있는 몬스터 죽이기라고 할 수 있다. 몬스터를 제거하는 방법에는 물풍선을 쏘아 죽이거나, 칼이나 검을 휘둘러 없애거나, 화살을 쏘는 등 게임마다 다양할 것이다. 이번 제작 과정에서는 해머와 총, 수류탄을 무기로 선택하여 이들을 사용하여 몬스터를 없앨 수 있도록 제작하였다. 이 외에 세부적인 요소들 또한 어렵지 않게 접할 수 있는 부분들이다. 보통의 게임에서 점수를 매기듯이, 위 게임에서도 몬스터가 죽으면 그 자리에 동전이 생성되어 플레이어가 이 동전을 획득했을 때 누적 코인 금액과 함께 게임의 점수가 올라간다. 또한 흥미진진한 진행을 위해 플레이어의 수명에도 제한을 걸어두어 몬스터의 공격을 받으면 수명이 줄어들도록 하였다. 반대로 이 게임에서 수명 연장의 기능에 해당하는 하트를 습득했을 경우 하트의 가중치마다 수명이 비례하게 늘어날 수 있도록 구상하였다. 위와 같이 게임을 연상했을 때 떠올릴 수 있는 기본 규칙들로 구현하였다. 사용한 기술 또한 어렵지 않게 접할 수 있는 부분들이다. 방향키로 플레이어를 조작하는 것, 스테이지 상에 존재하는 벽에 부딪히면 그 이상의 영역으로 이동할 수 없도록 하는 것, 스페이스 바로 플레이어를 점프시키는 것 등의 아주 표준적인 기술들을 구사하였다.

개발 목표

  • 기본적으로 게임 시작 화면, 게임 방법 소개 화면, 게임 실행화면, 종료 화면을 구현한다.
  • 여러 개의 스테이지로 구상하며 스테이지가 높아질수록 미션의 난이도 또한 올라가도록 한다.
  • 플레이어는 기본적으로 방향키로 조작하며 스페이스 바로 점프 기능도 할 수 있도록 한다.
  • 몬스터의 종류는 3가지로 구현한다. 몬스터마다 공격 강도와 공격 방법을 다르게 구현한다.
  • 무기의 종류는 4가지로 구현한다. 무기마다 공격 가중치를 다르게 구현한다.
  • 하트와 동전 아이템을 첨가하여 게임의 구상을 다채롭게 한다.

개발 내용

  • 게임 화면 : 시작 화면에는 게임의 타이틀 및 게임 규칙을 열람할 수 있도록 이동하는 버튼을 첨부하였다. 게임 방법 소개 화면에는 간단한 게임 규칙을 기재하였다. 게임 실행화면에서는 현재 스테이지, 남은 몬스터의 수, 남은 총알 탄의 개수와 생명 및 획득한 금액, 게임 진행 시간, 현재 소지하고 있는 무기가 한 화면 위에 표현될 수 있도록 하였다. 게임 종료 시 등장하는 화면에는 사용자의 최종 점수를 열람할 수 있도록 하였다.

  • 플레이어 : 스테이지마다 정 중앙에서 시작하게 된다. ‘Next Stage’라고 쓰여 있는 영역에 가야만이 해당 스테이지가 시작된다. 하트 아이콘을 섭취하면 생명력이 늘어나고, 몬스터 공격 성공 시 동전을 획득할 수 있다. 반대로 몬스터로부터 공격을 받으면 몸체가 일시적으로 노랗게 변해 공격당했다는 것을 시각적으로 보여준다. 생명력이 0에 도달하면 게임은 종료된다.

  • 무기 : 총 4가지의 무기를 첨부하였다. 두 종류의 총과 망치, 수류탄으로 구성하였다. 각 무기는 플레이어가 기본적으로 소지하고 있지 않으며, 스테이지 상에서 플레이어가 획득해야만 무기를 이용할 수 있다. 총과 망치는 플레이어가 키보드 e 버튼을 누르면 습득할 수 있으며 플레이어가 오른손에 장착하기 위해선 1부터 3까지 각 무기에 해당하는 숫자 버튼을 눌러야 한다. 수류탄은 플레이어가 근접한 위치까지 다가가면 자동으로 습득할 수 있다. 마우스 왼쪽 버튼을 눌러 망치를 휘두르거나 총을 겨눌 수 있으며, 마우스 오른쪽 버튼을 누르면 수류탄을 던질 수 있다. 총의 경우 총알 탄이 다 떨어졌으면 r 버튼과 마우스 더블 클릭을 동시에 해주면 장전된다.

  • 총알 : 총알이 발사된 후 플레이어 또는 물체에 부딪혀 바닥으로 떨어졌을 경우, 그 잔해가 스테이지에 계속 남아있지 않도록 바닥에 닿고 3초 뒤에 화면상에서 없어지도록 구현하였다. 스테이지의 벽에 부딪혔을 때는 총알이 바로 사라지도록 하였다.

  • 탄피 : 총알 발사 시 실감 나는 표현을 위해 총에서 탄피가 배출되도록 구현하였다. 마찬가지로 탄피 또한 일정 시간이 지나면 스테이지 상에서 제거되도록 하였다.

  • 몬스터 : 3마리의 몬스터 중 2마리는 플레이어의 좌표를 주기적으로 파악하여 플레이어를 쫓아가도록 하였다. 나머지 한 마리는 플레이어의 방향으로 미사일을 발사하도록 하였다. 플레이어에 의해 공격당했을 경우 몬스터의 몸체가 일시적으로 빨갛게 표현되고 몬스터의 생명이 줄어들도록 하였다. 생명이 0에 다다랐을 경우 회색으로 몸체의 색깔이 변하면서 일정 시간이 지나면 스테이지 상에서 사라지도록 하였고 죽은 자리에 동전이 생성될 수 있도록 하였다.

개발 결과



개발 후기

UNITY라는 프로그램을 사용하여 간단한 게임을 제작하였다. 게임에 흥미와 재능이 없더라도 누구나 쉽게 도전해볼 수 있는 쉬운 게임을 구현하는 것을 목표로 지나치게 복잡하지 않을 정도의 게임 규칙을 구상하고 이를 토대로 제작에 임하였다. 약간의 키보드 조작키와 마우스 핸들링으로 플레이어를 이동시키고 무기를 사용할 수 있도록 하였다. 더욱더 다양한 기능 제공 및 시각적 효과를 선보이기 위하여 한 가지 종류가 아닌 각기 다른 조작 방법과 가중치를 갖는 여러 종류의 무기 및 몬스터를 구상하였다. 게임의 구현 과정에서 Prefab, UI, GameObject, Coroutine 등 UNITY와 관련된 개념과 전반적인 UNITY의 매뉴얼에 대해 파악할 수 있었다. 마찬가지로 GUI 프로그래밍을 공부하며 처음 다뤄보았던 C# 또한 그동안 한 번도 이용해본 적 없었던 새로운 인터페이스와 함수, 타입들을 코드에 작성해보면서 한 층 더 실력을 키워나갈 수 있었다.

코드

자세한 코드는 Github에서 확인할 수 있다.

profile
취업 준비 용으로 사용했던 기술 블로그입니다. 이제는 업로드 거의 안 할지도..

0개의 댓글