시리즈:게임제작에 입문하려는 히치하이커를 위한 안내서

이제 우리도 소비만 하지 말고 생산을 해 보아요.

이 문서에는 독자적으로 연구한 내용이 들어갑니다. 다른 사람의 의견을 존중하면서 무례하지 않도록 작성해 주시고, 의견 충돌 시 토론 문서에서 토론해 주세요.

이제는 인디게임이 뜨는 시대가 왔습니다. 수많은 쉽고 좋은 툴들이 많이 출시되었고, 인터넷이 발달함에 따라 그 툴을 사용하는 방법도 빠르게 습득이 가능하죠.

이미 시중에는 RPG만들기 시리즈와 같이 특정 장르에 특화되어 정말 쉽고 간편하게 게임을 만들 수 있는 툴들이 많습니다. 이런 툴들을 이용하면 영어 실력이 정말로 많이 필요하겠지만 간편하게 게임을 만들 수 있습니다. 하지만 세상에 RPG 같은 것만 있는 건 아니잖아요? 타워를 짓거나 액션을 즐기거나 그러한 재미도 끝내주지요. 이 글에서 설명할 툴인 게임메이커나 다른 여러 프로그램을 이용하면 (RPG 만들기 시리즈보다는 조금 어려울지 몰라도) 매우 자유로운 게임 제작을 할 수 있습니다.

게임메이커 스튜디오[편집 | 원본 편집]

겜메홈피.png

www.yoyogames.com/studio

게임메이커: 스튜디오(Gamemaker Studio)는 마크 오버마스(Mark Overmars)가 제작하고 요요 게임즈(YoYo Games)에서 지속적으로 개발 중인 게임 제작 툴입니다. 아무것도 정해진 것이 없기 때문에, 어떠한 장르라도 만들 수 있습니다. 초기 버전은 게임메이커 1.0이었으며, 욕을 많이 먹은게임메이커 8.1까지 출시된 후 2012년 5월 22일에 현재의 게임메이커 스튜디오가 발매되었습니다.

본래에는 스탠다드 버전도 유료로 판매하였으나, 현재 스탠다드 버전은 무료로 제공되고 있습니다. 스탠다드 버전으로는 이전 게임메이커와 같이 윈도 전용의 게임만을 만들 수 있습니다. 게임을 켤 때마다 게임메이커 스튜디오의 로고가 등장하지만, 그 외의 대부분의 기능을 제한 없이 사용할 수 있고, 게임을 판매해도 라이선스 비용이 없습니다. 정말로 대인배예요

프로그래밍의 기본 정신[편집 | 원본 편집]

모르면 찾아 보자. 구글에서, 영어로.

게임 만드는데 중요한 건 (아이디어가 있다면) 프로그래밍이에요. 하지만, 그렇다고 모든 걸 외울 필요는 없어요. 사람이 외우기에는 턱없이 많은 정보가 있지만, 필요할 때마다 찾으면 돼요. 시리즈:쉽게 배우는 프로그래밍 입문#프로그래밍을 무서워 하지 말자!를 한번 정독하시고 마음을 다잡아 봅시다.


그래서 무엇을 만들까?[편집 | 원본 편집]

우선 게임메이커로 만들어진 유명한 작품들을 보고 갈까요?

이지스샷.jpg Ctrlcv스샷.jpg

게임메이커 스튜디오로 제작된 《Iji》와 《Ctrl CV》입니다. 이 두 작품은 게임메이커로 만들었으며, 선풍적인 인기를 끈 게임들입니다. 하지만 이 두 게임이 정말 화려한 그래픽을 가지고 있을까요? 아니면 엄청나게 멋진 오케스트라 음악을 썼을까요?

정답은 NO입니다. 이 두 가지 게임의 공통점은 지금까지 없었던 독창적이고 신선한 스타일이라는 것이죠. 그림을 못 그리거나 곡을 잘 못 써도, 우선 게임에서 가장 중요한 것은 리소스(resource)보다는 아이디어입니다. 물론 그렇지 않은 게임도 간혹 있습니다

설명이 정말로 길었습니다만, 그래도 첫 제작인데 너무 어려운 걸로 시작하면 안 되겠죠? 콘솔 프로그래밍에 『Hello, world!』가 있다면, 게임 프로그래밍에는 역시 똥 피하기가 있죠!

Suberunker.jpg

캐릭터와 다른 물체들이 움직이고, 목적은 없지만 게임 오버 조건은 있고, 점수 계산도 쉬운, 정말 교과서적인 게임입니다. 차근차근 계단을 밟아 올라가 봅시다.

그런 의미로 시작합니다. 리디버그 피하기 제작! 면책조항: 전 리디버그가 정말 귀엽다고 생각합니다.

리소스[편집 | 원본 편집]

겜메첫화면.png

쉽다고 해서 열어봤는데 어려워 보이시나요? 영어가 어렵다면 어휘력을 기르세요

여기서 왼쪽에 있는 리스트들은 현재 만들고있는 게임에 포함된 리소스(resource, 자료)들이에요. 그림이나 음악 등등을 담고 있죠. 당연한 말이지만, 무언가를 보여주고 들려주기 위해서는 리소스에 그걸 담아 둬야 해요.

스프라이트[편집 | 원본 편집]

스프라이트(sprite)는 게임에 쓰일 (배경을 제외한) 모든 그림 파일들을 말합니다. 그럼 우리가 무슨 그림이 필요한지 볼까요?

떨어지는 리디버그를  리브렌이 피하는 게임을 만들고 싶어!

그럼 우리가 무슨 스프라이트가 필요한지도 알기 쉽겠네요. 떨어지는 리디버그와 그걸 피할 리브렌 두 가지가 필요합니다.

Libren dot.png Labin dot.png 도트 감성

이 파일을 게임에 나오게 하기 위해서는 게임의 리소스로 만들어야겠죠?

겜메강좌01.png

왼쪽의 Sprites 폴더를 오른쪽 클릭하면 Create Sprite라는 것이 보일 겁니다. 이걸 누르면 스프라이트를 만들 수 있습니다. 또는 상단의 리브렌팩맨 모양 아이콘을 눌러도 됩니다.

스프라이트 이름을 sLibren이라고 해두었습니다. 앞에 s을 붙인 것은 리소스 이름이 겹치는 것을 방지하기 위해서입니다. 폴더가 분리되어 있지만, 이름을 똑같이 만들면 나중에 리소스를 호출할 때 원하지 않은 결과가 나오기 때문이에요. 꼭 s를 붙일 필요는 없고 'spr_libren'과 같이 써도 됩니다.

Edit sprite를 열고, 위의 이미지를 복사하여 붙여 넣습니다. 겜메강좌02.png

왼쪽 상단의 √를 눌러 닫습니다.

오른쪽에 보니 Collision Checking(충돌 체크)이라는 게 있네요. 피하기류의 게임인 만큼 각자의 충돌 범위는 중요하죠. 세 가지가 있는데, 하나하나 알아봅시다.

  1. Precise collision checking: 정밀 충돌 판정. 이것을 체크하면 그림의 투명하지 않은 부분을 충돌 범위로 가져요. 아래의 Shape의 Precise와 같은 기능입니다.
  2. Separate collision masks: 충돌 마스크 분리. 스프라이트의 충돌 판정 범위를 별도의 마스크로 설정합니다.
  3. Modify Mask: 마스크 수정. 마스크 설정을 수정할 수 있습니다.
    • Bounding box: 마스크의 최대 허용 크기를 정합니다. Automatic은 자동으로 설정해 주고, Full image는 이미지 전체를 지정합니다. Manual로 직접 설정할 수 있습니다.
    • Shape: 마스크의 모양입니다. 보통 Precise(정확하게 색이 칠해진 부분)을 씁니다. 그 외에 Ellipse(타원), Rectangle(직사각형), Diamond(마름모, 다이아몬드)가 있습니다.
    • Alpha tolerance: Shape에서 Precise를 선택했을 때, 투명도(alpha)가 어느 정도 이하인 부분을 마스크로 설정할 것인지를 정합니다. 비어 있는 부분은 버리고, 색이 칠해진 부분을 선택할 때 쓰입니다.

Modify Mask를 눌러, Shape - Precise를 선택한 후 OK를 눌러 닫습니다.

리디버그도 똑같이 만들어 보아요.

겜메강좌03.png

오른쪽 미리보기를 클릭하면 클릭한 곳이 "원점", 즉 물체의 중심으로 지정됩니다. 우리 캐릭터들은 땅을 밟아야 하니, 중심점을 두 발 사이로 해 줍시다. (리디버그는 할 필요는 없습니다.)

자. 게임에서 나올 그림들은 전부 만들었습니다. 간단하죠? 이 정도 영어쯤은 아무것도 아니잖아요?

오브젝트[편집 | 원본 편집]

드디어 게임메이커 스튜디오에서 가장 중요하다고 볼 수 있는 오브젝트입니다. 오브젝트는 게임에서 나오는 모든 연산과 수행뿐만 아니라 그래픽과 사운드까지 관장합니다. RPG 만들기 시리즈에서 말하는 "이벤트"와도 비슷하지만, 오브젝트는 타일 하나하나에도 설정이 가능합니다.

오브젝트(object)는 물체의 "설계도"이고, 아래에서 설명할 인스턴스(instance)는 각각의 물체를 말합니다. 예를 들어 여러 똑같이 만들어진 리디버그가 있으면, 리디버그가 어떻게 작동하게 할 것인지 설계하는 것이 오브젝트, 각각의 리디버그는 인스턴스입니다.

게임메이커 스튜디오의 자유도는 바로 오브젝트에서 나옵니다. 오브젝트는 기본적인 조건과 그에 따른 행동만을 가지고 있기 때문에, 원하는 조건과 원하는 행동을 계속 써줌으로서 어떠한 게임이든지 구현이 가능하기 때문입니다.

우선 우리가 어떤 오브젝트를 만들어야 하는지 알아볼까요?

  • 리디버그를 피하는 리브렌
  • 리브렌을 잡으러 오는 리디버그

여기까지는 다들 아실 거예요. 하지만, 여기서 의문이 듭니다.

그럼 리디버그는 누가 떨어뜨려?

네. 바로 이 행동까지도 오브젝트의 영역으로 처리하는 것입니다. 그렇다면 우리가 필요한 것은 이 세 가지가 되겠네요?

  • 리디버그를 피하는 리브렌
  • 리브렌을 잡으러 오는 리디버그
  • 그 리디버그를 만들 시스템 오브젝트

시스템 오브젝트는 그 외에도 다른 모든 것을 설정해 둘 수 있습니다. 예를 들어, 배경음악을 재생한다든가, 점수를 화면에 띄운다든가 하는 것도 말이에요.

그래서 그 오브젝트는 어떻게 다루냐고요? 조금만 기다려 보죠. :)

백그라운드와 룸[편집 | 원본 편집]

아무것도 안보이는데 게임을 하는게 가능할까요? 당연히 불가능하겠지요. 게임이 진행되는 공간을 지정해주고 그곳에 오브젝트를 때려넣어야할겁니다. 그걸 우리는 이라고 합니다.

겜메강좌04.png

(해당 이미지내의 게임은 lecture_2_practice.gmk를 사용합니다. 저작자-강낭땅콩 블로그)

모든 오브젝트는 그 자체로 어떠한 행동을 하지 않고, 룸에 배치해야만 행동을 개시하게 됩니다. 이때, 배치된 오브젝트는 자신의 인스턴스를 만듭니다. 오브젝트는 설계도일뿐이고, 실제로 행동하는 것은 그 설계도대로 만든 인스턴스 라는거죠. 비슷하면서 전혀 다른 의미이므로 구별하셔야 합니다.

여튼, 무언가를 하고싶다면, 룸에 모든것을 넣어두어야합니다. 룸에 있지 않은 오브젝트는 다른 오브젝트가 부르지 않는 이상 그 룸에서는 어떠한 역할도 할 수 없는 것이죠.

백그라운드는 그 룸의 맨 뒤를 장식합니다. 네. 배경 입니다.

겜메강좌05.png

백그라운드도 스프라이트와 비슷합니다.

겜메강좌06.png

자 그럼 룸을 만들어보겠습니다. 룸을 생성하면 참 복잡한게 너무 많네요. 그러니까 영어를 배우세요

우선 왼쪽의 탭을 설명하겠습니다.

  • background : 백그라운드 리소스를 가져와서 배경으로 씁니다.
  • views : 현재 게임의 화면에 나올 화면을 정해줍니다.
  • physics : 중력 등등의 물리엔진을 관장합니다.
  • objects : 오브젝트 리소스를 가져와서 인스턴스로 씁니다.
  • setting : 룸의 크기와 속도를 지정합니다.
  • tiles : 타일셋 사용(Use as tile set)설정이 켜져있는 백그라운드 리소스를 가져와서 배경으로 씁니다. RPG 만들기 툴과 비슷하게 타일로 맵을 만들수 있습니다.

참 쉽죠?

우리는 굳이 화면이 이동할 필요도 없기때문에 지금은 다 건들지말고 배경설정과 크기조절만 할게요.

겜메강좌07.png

겜메강좌08.png

여기까지 해두면 룸설정은 더 건들 필요가 없겠네요.

Speed는 룸의 속도를 나타냅니다. 1초당 몇 스탭을 가지는가?를 나타내는데요, 다른 게임으로 치면 프레임과 비슷한 겁니다. 용량이 커지면 낮춰야겠지만, 똥피하기 정도는 60스탭도 가뿐합니다.
Persistent라는 단어를 object에서도 room설정에서도 보았을텐데요, 이것이 켜져있으면 그게 고정됩니다. 위치가 아니라, object는 다른 룸으로 가도 따라 오고, room은 다른 룸으로 가도 초기화가 되지 않습니다.
sprite에서 말씀드린거지만, 꼭 리소스 이름은 리소스종류_이름 으로 하세요!

더 멋있게 다듬기위한 리소스들[편집 | 원본 편집]

알아두면 좋은 리소스들[편집 | 원본 편집]

실전! 게임을 만들어보자![편집 | 원본 편집]

조작을 만들어보자[편집 | 원본 편집]

대망의 제작실습이에요. 지금까지 잘 따라오고 계신가요? 게임메이커스튜디오를 통한 게임제작은 오브젝트로 시작해서 오브젝트로 끝나요. 모든 조작과 모든 기능을 오브젝트로 다뤄야 하기 때문이에요. 하지만, 오브젝트의 경우에는 알아둬야할게 많아요. 필요한 것만 배우고 싶다면 아래에 있는 표들을 접고 따라오시면 되지만, 그래도 한번 쯤 배우고 가고싶다면 열어서 한번씩 훑어봅시다. 게임 제작은 직접 하면서 실력이 오르지만, 그래도 예습은 중요하잖아요?

겜메강좌09.png

우선 오브젝트의 속성부터 살펴봅시다.

  • Name : 이름입니다.
  • Sprite : 이 오브젝트에게 스프라이트를 지정해줄수 있습니다.
  • Visible : 이 오브젝트로 작업하는 이미지들이 보이게 합니다. 꺼져있다면, 아무리 Draw액션을 사용해도 안나옵니다.
    • Sprite가 지정된 오브젝트라도 Draw액션을 사용하면 그 Sprite로 보이지 않게 됩니다. 후술할 Draw액션에서 자세히 설명할께요.
  • Solid : 오브젝트에게 "고체화"속성을 부여합니다. 이거 자체로는 아무 효과 없어요! 후술할 이벤트나 액션에 영향을 끼칩니다.
  • Persistent : 일반적으로 다른 룸으로 옮겨갈경우 이전 룸에서의 인스턴스가 전부 사라집니다. 하지만, 이걸 켜둔 오브젝트의 인스턴스들은 룸을 옮겨갈경우 같이 따라 옵니다. 만약 이 오브젝트가 있는 룸에 다시 들어갈경우, 인스턴스가 초기화됩니다.
  • Uses Physics : 물리엔진을 사용하는가에 대한 것입니다. 중력 등등을 의미합니다. 별로 쓸 일은 없을겁니다.
  • Depth : Z축을 의미합니다. 수치가 높을수록 Z축 위치는 작아집니다. 반대로, 수치가 낮을수록 다른 스프라이트들을 덮고 보이겠죠.
  • Parent : 부모오브젝트 상속을 설정합니다. 이게 설정된 오브젝트는 그 오브젝트에 설정된 이벤트들을 제외한 다른 조건에서의 액션들을 부모오브젝트와 똑같이 복사합니다. 물론, 설정된 이벤트에서도 상속받도록 하는 액션이 있습니다.
  • Mask : 실제 보이는 모습과 충돌범위를 다르게 하고싶을경우 고르시면 됩니다.
  • Children : 자기 자신을 parent로 설정한 오브젝트의 리스트입니다.
  • show information : 이 오브젝트의 정보들을 텍스트형태로 보여줍니다.
  • Events : 조건입니다.
  • Actions : 그 조건에 맞을 경우 실행될 결과입니다.

사실 영단어 알면 해석이 가능한 수준입니다

오브젝트는 가장 중요한만큼 아는 것이 힘이됩니다. 알면 나중에 빼쓰기도 좋거든요.

오브젝트 이벤트와 액션은 게임메이커스튜디오 액션 을 참조해주세요. 한번쯤 훑어보고 앞으로의 내용을 읽는 것이 더 도움이 됩니다.

흐름을 만들어보자[편집 | 원본 편집]

게임을 완성해보자[편집 | 원본 편집]

각주