내 이야기/프로젝트

미니 1942 게임 만들기(Unity)

bale.yoon 2020. 12. 10. 01:36

2020.12 혼자

개요

게임개발에는 다양한 게임엔진들이 활용된다.

게임개발에도 여느 프로그래밍 언어, 프레임워크 처럼 각자의 특징, 장단점들이 있다.

 

(참조 : https://brunch.co.kr/@iimjae123#articles) 

이 분의 게임개발 관련된 글은 재밌고 유익했다

 

플랜트블랙의 브런치

학생 | 언젠가 이 소개란에 제가 만든 게임 제목이 올라올 날을 꿈꿉니다.

brunch.co.kr

플랫폼 독립적이고 빠르게 제작 가능하지만 라이센스나 프로그래밍 지식이 많이 요구되는 엔진들도 있고 이와 반대되는 엔진들도 있다.

 

다양한 엔진들 속에서 가장 대중적이고 인기있는 게임엔진을 사용해보고 싶기도 했고 게임 개발에 도전(?)해보고 싶다는 생각이 있었다. 그런데, 마침 재밌어보이는 교재가 있어 읽어보면서 나름대로 내 것으로 습득해보면서 나름대로의 게임을 구현해보고자 했다(막상 만들고보니 교재의 샘플과 큰 차이는 없는 것 같다..ㅎㅎ).

 

게임하면 대표적으로 떠오르는 것이 1942 였다. 남녀노소(?)할 거 없이 모두가 한 번쯤은 스쳐지나가는 추억이 있는 게임일 것 같아서 도전해보고 싶었다. C#의 러닝커브도 괜찮고 유니티 자체도 어렵지 않다는 이야기들이 있어서 믿고 도전해봤다(ㅎㅎ.. 믿음에 조금은 배신당했다).


구현

 

 

시작 화면

 

 

 

게임 화면

 

운영체제 : Window
개발환경 : Unity 2019.4.21f , C# + .NET CORE 5.0 SDK 

 

교재에는 C#과 Unity 의 기본적인 개념들을 익혀보면서 GameObject의 이해부터 차근차근 안내되어 있었다.

객체지향적 관점(상속, 인터페이스 등)과 C#의 여러가지 기능들(Delegating, Action, FileStream 등)이 Unity 속에서 어떻게 활용되는지, 또 게임에서 어떻게 구현되는지 많은 부분들을 직접 느낄 수 있었다.

 

게임을 이용하고 즐겼던 유저의 입장에서는 전체적인 것들을 봤었다. 그러나 구현을 하는 입장이 되니 하나씩 생각을 해보게 되고, 게임 객체들이 어떻게 생성되고 또 어떻게 제어, 관리되는지 이런 부분들을 조금이나마 이해할 수 있는 프로젝트였다.

 

 

Start버튼 클릭 통해 시작

  • 조작법 WASD 이동, SPACE 공격
  • HP 5로 시작, 0이 되면 종료,
  • Score 적을 처치 시 +1, Coin 획득 시 +1 (파란색 소용돌이는 Speed Up 10% 상승) 
  • 게임 내용은 자동저장, 최고 기록은 시작 화면에서 공개

 

게임 오브젝트

  • Player : 말 그대로, 우리가 조종할 플레이어, 이동에 따른 좌표값 변경과 필요한 속성들(점수나 생명)을 지닌 핵심 객체이다. Enemy와 부딪힐 경우와 Item과 부딪힐(먹을) 경우에 이벤트를 호출하여 처리 
  • Gun : 총알을 발사할 객체, Player가 지니고 있는 객체
  • Bullet : 총알 객체로, 특정 시간이 지나면 사라지도록 설정, Enemy와 부딪힐 시 이벤트를 호출하며 필요한 로직을 처리해야 함.

 

  • Enemy(Enemy1, Enemy2) : Enemy 부모 클래스와 자식 클래스로 나눠 구현, 이동 방향이나 이미지에 다르게 구현, 시간이 지남에 따라 적이 다양한 좌표에서 등장
  • Item(Coin, SpeedUp) : 구현한 아이템은 코인과 속도 증가. 시간이 지남에 따라 아이템이 다양한 좌표에서 등장

 

  • Manger(Spawn, Item, Enemy, Game) : 게임 내 다양한 오브젝트들을 관리하고 여러 이벤트들을 처리하고 게임 전반의 제어를 관리
  • Canvas, BG, Text : 화면 처리 오브젝트, 이벤트 처리에 따라 값이 변하기도 하면서 리로드하며 보여준다
  • 그 외 기타 등등

 

 

게임 개발과 엔진?

도전해보고 싶은 분야였고, 요즘은 인터넷 강의나 서적들이 잘 구비되어 있어 입문하기 어렵지 않을거라 생각했다. 무엇보다도 호기심이 많이 들었다. 게임 개발하는데 얼마나 많은 양의 코드들이 필요할지 아무것도 모른 상태에서는 감도 안왔다. 그런데 실제로 Unity로 개발하면서 느낀점은 그런 부분들을 게임 엔진을 통해 해결하고 있구나라는 느낌을 많이 받았다. Unity에서는 GUI와 C# 스크립트를 통해 게임 개발에 생각보다 많은 공수가 필요하진 않았고 엔진의 역할이 정말 중요함을 많이 느꼈다

 

왜 Unity 였나?

가장 먼저 무료다. 어느 정도의 수입이 생기면 라이센스를 추가로 구매하여야 하지만 나는 해당 사항이 없으므로 Unity를 택했다. 추가적으로, 직관적인 인터페이스와 C# 언어에 대한 호기심들도 있었다. 또한 다양한 플랫폼으로 손쉽게 빌드가 가능하다. 이 부분은 게임을 빌드하면서 정말 잘되어있음을 직접 느꼈다. 마지막으로, 참고할만한 문서가 많았던 것도 좋았다. 게임개발을 입문하면서 이런 문서들이 많아 검색을 통해 해결한 부분들도 많이 있었다.

 

C#에 대해서

이름만 보고 C/C++에 가까울 줄 알았다. 그런데 쓰다보니 Java와 유사하다는 생각을 했고 나무위키를 보니, Java의 대항마로 마이크로소프트에서 개발한 언어라는 역사를 가지고 있었다. 실제로 C나 C++과 비슷할 거라 생각한 사람들도 많았는 듯하다. 재밌는 문법은 인덱서, 델리게이트, 람다식, Action/Func, Event 발행/구독 모델 등 이런 문법들이 게임 개발에서 엄청 유용하게 활용되었다. 주로 사용하는 Java로 치면 람다식 외에는 저런 C#의 문법을 커버할만한 문법적인 장점이 생각나지 않았다. 그만큼 C#을 왜쓰는지는 조금 이해할 수 있었다(아주 조금). 

 


완성

 

소스코드

https://github.com/YoonShinWoong/Mini1942

 

YoonShinWoong/Mini1942

Unity C# 2019 4.2f1. Contribute to YoonShinWoong/Mini1942 development by creating an account on GitHub.

github.com

 

게임파일(압축해제 후 Window/Mac 환경에서 플레이해볼 수 있다. 물론 물론 퀄리티는 정말정말 좋지 않다..ㅎㅎ)

 

MINI_1942.zip
1.71MB
MINI_1942.z01
10.00MB
MINI_1942.z02
10.00MB

 

 

 

시연영상

youtu.be/D4vf0byjONY