해당 시리즈는 제가 운영중인 카페에 연재중인 '처음 만나는 게임메이커 스튜디오 2'를 다듬어 재업로드하는 것입니다. 이 시리즈의 타겟층은 '게임 제작 뿐만 아니라 프로그래밍 언어 또한 처음 접하시는 사람들' 입니다. 아무래도 게임메이커를 사용하시는 많은 사람들의 기억 속에 게임메이커는 '내 첫 게임을 만든 툴' 이라는 인식이 강하고, 실제로 게임메이커를 통해 게임 개발에 관심을 가지게 된 분들이 많기 때문에, 상업적으로든 취미 생활로든 게임 개발을 시작하시고 싶은 분들에게 게임메이커는 좋은 출발이 될 것이라 생각됩니다.
------------------------
0. Welcome to hell
1. 새 프로젝트 생성
2. 새 오브젝트 만들기
3. 이벤트를 생성하고 코드 입력하기
4. 룸에 오브젝트 삽입하기
5. 게임 실행하기
0. Welcome to hell
반갑습니다. 저는 네이버에서 게임메이커 사용자 커뮤니티 PlayGM을 운영하고 있는 박상훈 (ZPink) 이라고 합니다. 인디 인벤이 오픈했다는 좋은 소식과 함께, 인디 게임 강좌 게시판이 존재하고, 심지어 거기에 게임메이커가 따로 분류되어있는 것을 보고 굉장히 놀랐습니다. 아쉽게도 그에 관련된 글은 아무것도 없었지만요. 그래서 제가 한 번 스타트를 끊어보고 싶었습니다.
그보다 많은 분들이 이 툴의 정체에 대해 궁금해하실 것이라 생각됩니다. 게임메이커가 대체 뭐하는 물건일까요? 'GameMaker Studio' 는 YoYo Games가 개발한 2D 게임에 특화된 게임 툴입니다. 자체 지원 언어인 GML과, 드래그 앤 드롭 방식의 액션 블록을 이용한 게임 제작을 하실 수 있습니다. 게임메이커를 사용해 만들어진 게임으로는 '언더테일', '핫라인 마이애미', '모모도라 : 달 아래의 진혼곡', '리스크 오브 레인'과 같은 게임이 있습니다.
언더테일의 개발자 토비폭스는 게임메이커를 사용하여 게임을 만들고 이런 소감을 남기셨습니다.
"Welcome to hell"
지옥에 오신 것을 환영합니다. 너무 걱정마세요. 어떤 프로그램으로 만들어도 게임 개발은 지옥같을테니까요... 하지만 완성품이 나오는 순간 그 끝은 분명 아름다울 것입니다. 함께 극복해나가보자구요. 여러분들은 이제 저와 함께 '겜메지옥'에 빠지게 될 것입니다.
1. 새 프로젝트 생성
처음 게임메이커 스튜디오2를 켜면 환영의 메시지와 함께 이런 저런 문구가 나옵니다. 궁금하시면 보셔도 되지만, 저는 과감하게 'Close'를 클릭하여 넘기도록 하겠습니다.
본격적인 메인 메뉴가 나왔습니다. 우리는 새로운 게임을 만들 것이기 때문에 New를 클릭해야겠죠. 만약 이미 만들던 게임이 있는데 불러와서 다시 작업하고 싶으시다면 Open을 클릭하시면 됩니다.
새 프로젝트를 어떤 것으로 작업하고 싶은지 고를 수 있습니다.
게임메이커에서는 '드래그 앤 드롭'과 자체 스크립트 언어인 'Game Maker Language(이하 GML)'을 사용할 수 있는데, 저는 GML을 사용하여 게임을 만들어볼 것입니다. GameMaker Language를 클릭 합니다.
2.새 오브젝트 만들기
자, 빈 화면이 나왔습니다. 오른쪽에 메뉴가 보입니다. 이 부분은 Resource 탭이며, 이미지, 사운드 등이 보관되는 메뉴라고 보시면 됩니다. 어떤 것이 있는지 살펴보도록 하겠습니다.
Sprites - 캐릭터 이미지, 배경화면 등을 보관합니다.
Tile Sets - 게임 화면을 꾸며줄 타일셋을 저장합니다.
Sounds - 배경음, 효과음 등의 소리를 저장합니다.
Paths - 게임 캐릭터를 일정 경로로 움직일 수 있도록 경로를 만듭니다.
Scripts - 유저가 직접 만든 스크립트들을 보관합니다.
Fonts - 폰트를 보관합니다.
Timelines - 타임라인을 보관합니다. 어느 타이밍에 어떤 액션을 실행할 지 지정해주는 기능이지만, 거의 쓰이진 않으니 그냥 이런 게 있구나 하고 넘기셔도 될 것입니다.
Objects - 오브젝트를 보관합니다. 실질적으로 게임 화면에 배치하게 될 캐릭터나 몬스터등은 이 오브젝트가 될 것입니다.
Rooms - 룸을 보관합니다. 룸이 바로 우리가 잘 아는 게임 화면입니다. 기본적으로 1개가 미리 생성되어있습니다.
Notes - 노트를 작성하여 보관할 수 있습니다.
Included Files - 외부에서 파일을 따로 불러올 수 있습니다.
Extensions - 외부에서 부가기능을 불러옵니다. 예를 들어 모바일 광고 등을 넣고자 할 때 사용할 수 있습니다.
다른 리소스들을 모두 추가해서 본격적인 게임 개발을 시작해볼 수 있지만, 가장 먼저 우리는 GML의 사용법을 알아볼 것입니다. 만약 여러분들이 프로그래밍을 접해보신 적이 있으시다면 GML은 굉장히 쉽게 사용하실 수 있을것이고, 앞으로 올라올 몇개의 글 역시 엄청나게 지루하고 재미없는 것이 될 수도 있습니다. 혹시나 완전히 코드를 입력하는 것이 처음이라면, 그래도 상관없습니다. 생각보다 어렵진 않을테니까요!
왼쪽 메뉴 중 Object (오브젝트)에 마우스 오른쪽 버튼을 클릭한 후 Create를 클릭하여 새로운 오브젝트를 생성합니다. 여기서 오브젝트가 뭐하는 물건인지 궁금해하실 분들이 있을텐데요, 오브젝트는 여러 상황에 따라 특정한 작업을 수행하는 명령어를 담아내는 하나의 객체입니다. 여기에 Sprite (스프라이트)를 추가하면 여러분들이 게임 내에서 조종할 수 있는 캐릭터를 만들어낼 수가 있습니다. 다만 우리는 우선 GML을 사용해보는 것이 목적이기 때문에 오브젝트에 별도의 스프라이트를 설정하지는 않겠습니다.
3.이벤트를 생성하고 코드 입력하기
처음 오브젝트를 생성하면 이러한 창이 나오게 됩니다. 이 오브젝트의 Name(이름)은 objText로 짓겠습니다. 이벤트라는 창이 옆에 함께 나와있는데, 여기에 새로운 이벤트를 추가할 것입니다. 게임메이커는 많은 그래픽 기반의 프로그램을 개발하는 환경이 그러하듯 이벤트의 반응을 통해 코드가 작동되는 방식을 취하고 있습니다. 이벤트는 오브젝트의 초기 행동이나, 특정 버튼을 눌렀을 때, 다른 오브젝트와 부딪혔을 때 등의 상황을 뜻합니다. 이벤트의 발생은 대체로 유저가 직접 명령을 내리는 것으로 수행되지만, 몇몇의 이벤트는 오브젝트가 스스로 실행하기도 합니다. 전자는 키보드의 특정한 키를 입력하거나, 마우스로 오브젝트를 클릭하는 경우 등이 될것이고, 후자는 어떠한 다른 오브젝트와 충돌하였을 때, 혹은 매 프레임마다 실행되는 명령어가 될 것입니다.
게임메이커에 어떤 종류의 이벤트가 있는지 전반적으로 살펴보도록 하겠습니다.
Create
인스턴스가 생성되었을 때 일어나는 이벤트입니다. 룸에 해당 인스턴스가 배치된 채로 게임이 시작된다면 룸에 진입하였을 때 이 이벤트가 작동할 것이고, 게임 중간에 만들어진다면 만들어진 직후에 작동하게 됩니다.
Destroy
인스턴스 삭제 액션이 작동되어 인스턴스가 제거된 이후 일어나는 이벤트입니다.
Clean Up
룸 이동, 게임 종료 등 룸 상에서 인스턴스가 제거되는 상황에 작동하는 이벤트입니다.
Step
매 프레임마다 일어나는 이벤트입니다.
Alarm
사용자가 정해준 시간 이후에 발생하는 이벤트입니다.
Draw
화면에 도형이나 스프라이트, 글씨 등을 표시할 때 사용하는 이벤트입니다.
Mouse
마우스 버튼이나 휠이 작동할 때 일어나는 이벤트입니다.
Key Down, Key Pressed, Key Up
키보드에 관련된 이벤트이며, 각각 키를 누르고 있는 동안, 키가 눌렸을 때 1번, 눌려있던 키를 떼었을 때 일어나는 이벤트입니다.
Gesture
휴대용기기를 고려한 이벤트로, 터치 디바이스에서 탭, 더블탭, 드래그 등을 하였을 때 발생합니다.
Collision
다른 오브젝트와 충돌하였을 경우의 발생하는 이벤트입니다.
Other
인스턴스가 룸 밖을 벗어나거나 룸이 시작되었을 때, 스프라이트의 애니메이션이 끝났을 때 등의 기타 다양한 상황의 이벤트들이 모여있습니다.
Asynchronous
네트워킹, 인앱구매 등 비동기적인 상황에서 발생하는 이벤트들이 모여있습니다.
앞서 얘기하였던 오브젝트가 매 프레임마다 스스로 실행하는 이벤트 중의 하나가 바로 'Draw'입니다. Draw 이벤트는 화면에 문자나 그림을 출력하는데 사용하실 수 있습니다. Add Event - Draw를 순서대로 클릭하여 이벤트를 추가합니다.
그러면 코드 에디터가 나옵니다. 이 코드 에디터에 직접 GML을 입력하실 수 있습니다.
자, 그렇다면 이런 텍스트를 입력해보겠습니다.
draw_text(0,0,"Hello World!");
|
draw_text(x,y,문자); 는 화면에 글자를 출력시키는 기능입니다. x와 y에 글자가 표시될 위치를 기록하고, 문자 부분에 원하는 문자를 넣습니다. 이러한 특별한 기능을 실행하는 코드를 우리는 '함수' 라고 하는데, 일단 이런 것이 있다는 것을 기억하시고, 자세한 것은 이후에 설명하도록 하겠습니다.
그리고 또 하나의 의문점. 왜 코드 뒤에 ; 을 넣었을까요? ';' 은 땀 모양 이모티콘이 아니라 '세미콜론'입니다. 세미콜론은 코드 한 줄의 끝을 의미합니다. 게임메이커의 경우는 단순히 엔터를 입력해 코드의 줄을 변경하는 것으로도 세미콜론의 역할을 대신할 수 있긴 하지만, 대부분의 프로그래밍 언어는 세미콜론으로 끝을 맺기 때문에 저 역시 세미콜론을 사용하도록 하겠습니다.
4. 룸에 오브젝트 삽입하기
이제 화면에 글자가 잘 나오는지 한번 확인해보도록 하지요. 왼쪽 메뉴의 Rooms 항목의 room0을 더블클릭합니다. room0은 새 프로젝트를 생성하면 기본적으로 만들어져있는 룸입니다. 룸은 게임의 화면을 구성하기 위해 사용되며, 이 곳에 우리가 만든 오브젝트를 삽입하여 게임 화면에 그것을 출력할 수 있습니다.
룸이 등장하였습니다.
처음 룸을 만들면 크기는 1024 * 768 이지만, 글자를 출력하는데 그렇게나 큰 사이즈의 화면은 필요없으므로 우리는 룸의 크기를 조절해보도록 하겠습니다. width를 480, height를 240으로 바꾸어보도록 합니다.
룸에 오브젝트를 넣어보도록 하겠습니다. 왼쪽 메뉴의 objText를 룸의 적당한 위치에 끌어다 놓습니다. 오브젝트는 ?가 쓰여진 동그라미로 표시됩니다. 이것은 스프라이트를 넣지 않았기 때문이고, 만약 스프라이트가 설정되어있는 오브젝트라면 해당 스프라이트의 형태로 표시될 것입니다. 실제 게임을 실행시켰을 때에는 이 ?표시는 보이지 않게 됩니다.
만약 오브젝트가 룸에 삽입되지 않는다면 현재의 레이어가 Instances 레이어인지 확인하셔야 합니다. 초기에 룸은 Instances 레이어와 Background 레이어로 나뉘어져있습니다. 오브젝트를 삽입할 수 있는 레이어는 Instances이고, 배경화면을 삽입하는 레이어는 Background입니다. 아래의 메뉴를 통해 새로운 레이어들을 더 만들어낼 수가 있습니다.
그런데 여기서 짚고 넘어가야 할 부분이 있습니다. Instances는 뭐고 Object는 뭘까요. 우리가 이벤트를 추가하고 코드를 작성하며 만든 것을 '오브젝트'라고 한다면, 그것이 룸에 삽입된 형태는 '인스턴스' 로 부릅니다. 이것을 도장에 비유해보자면, 스프라이트 (Sprite)는 도장의 디자인, 오브젝트는 도장 몸통, 그리고 인스턴스는 도장으로 찍어낸 자국이라고 보실 수 있겠습니다.
룸에는 이러한 버튼들도 있습니다. 왼쪽에부터 룸에 그려진 격자의 색을 바꾸거나 보이지 않게 만들 수 있는 버튼, 룸을 축소, 원래 크기, 확대할 수 있는 돋보기. 움직임이 있는 스프라이트를 미리 확인해볼 수 있도록 정지 재생 버튼이 있습니다. 맨 마지막의 레이어 버튼을 누르면 레이어가 여러개 있을 경우 현재 선택된 레이어에 구애받지 않고 다른 레이어의 오브젝트 또한 마우스로 선택할 수 있도록 해줍니다.
5.게임 실행하기
룸에 오브젝트를 삽입하였다면, 상단 메뉴의 실행 버튼을 클릭합니다. 간단하게 단축키 F5를 누르셔도 됩니다.
Hello World가 화면에 표시된 것을 확인하실 수 있습니다.
축하합니다. 드디어 게임메이커 스튜디오 2를 처음으로 사용해보셨습니다. 더 재미있는 부분은 이제부터 시작입니다. 앞으로 저와 함께 GML을 본격적으로 사용해보고, 이어서 실제로 간단한 슈팅게임을 만들면서 전반적인 툴의 사용법을 살펴보게 될것입니다.