게임메이커로 게임 개발 시작하기 Part 4: 초보자를 위한 프로그래밍 언어 가이드

GameMaker Studio로 게임 개발 시작하기 Part 4

게임메이커 스튜디오는 Game Maker Language (GML)이라는 자체 프로그래밍 언어를 사용합니다. GML은 주로 C 언어와 Pascal 및 Javascript의 영향을 받았으며, 게임 개발에 추진력을 더하고 각 오브젝트들의 모든 행동과 결과에 정교한 작업이 가능합니다.

본 가이드에서는 게임메이커 스튜디오 2에서 게임을 만드는 과정 중 스크립트를 작성하는 방법과 GML의 기본적인 문법과 개념을 설명하고, 변수, 조건문, 반복문, 함수 중 제일 많이 사용하는 예제를 소개하겠습니다. 이 가이드는 GML에 익숙하지 않은 초보자를 대상으로 하며, 게임메이커 스튜디오의 기본적인 사용법은 다른 포스팅에서 다루도록 하겠습니다. 인디 게임 개발자로 거듭나기 위한 궁극의 비기들을 다루는 카테고리도 개설할 예정입니다. 😎

게임메이커에서 스크립트 작성 준비

gms_script_1_게임_개발
gms_script_2_게임_개발
gms_script_4_게임_개발

Asstes 브라우저에서 Sprites 폴더를 우클릭하고 Create -> Sprite를 선택합니다. 스프라이트는 게임에서 사용되는 이미지나 애니메이션을 의미합니다. 스프라이트 이름은 ‘spr_player’라고 지어줍니다.

gms_script_5_게임_개발

그리고 Edit Image 버튼을 눌러서 스프라이트 에디터를 엽니다. 일반적인 이미지 에디터와 유사한 인터페이스를 가지고 있습니다만 이 이미지 에디터도 상당히 직관적이어서 어렵지 않게 사용할 수 있습니다. 여기서는 간단하게 원형의 캐릭터를 그려보겠습니다. 원형 툴(Ellipse Tool)을 선택하고 색상을 바꾸고 원을 그리면 됩니다.

gms_script_7_게임_개발
gms_script_8_게임_개발

원형 툴은 색상이 채워지지않은 아웃라인 원형 툴이 있고 색상을 채우면서 원형을 그리는 필 원형 툴 두가지가 있습니다. 아이콘에 마우스를 오버하시면 사각형의 아이콘이 대각선으로 나눠저 있는것을 확인할 수 있습니다. 왼쪽위가 아웃라인 오른쪽 아래가 채워진 필 아이콘으로 나눠저 있죠!

각 툴 별로 마우스를 오버하면 해당 툴 이름과 단축키가 팝업되어 표시됩니다. 단축키를 기억해두시면 게임 개발 속도에 조금이나마 도움이 될것입니다. 스프라이트의 크기나 위치는 마음대로 조정하시면 됩니다. 참고로 꼭지점 끝에서 대각선 반대 방향 끝으로 드래그해서 그리시면 정확한 원이 그려집니다. 저는 이렇게 그렸습니다.

gms_script_6_게임_개발

원하는 스프라이트 작업이 나왔다면 화면 상단에 x 버튼을 누르고 에디터를 닫아주세요.

이제 오브젝트를 만들어보겠습니다. 오브젝트는 게임에서 행동하는 주체입니다. 오브젝트에는 스프라이트와 스크립트가 연결됩니다. 스프라이트는 오브젝트의 모양을 결정하고, 스크립트는 오브젝트의 행동을 결정합니다.

gms_script_9_게임_개발
gms_script_10_게임_개발

오브젝트를 만들려면 Objects 폴더를 우클릭하고 Create -> Object를 선택합니다. 오브젝트 이름은 ‘obj_player’라고 지어줍니다. 그리고 Sprite 속성에서 우측의 … 버튼을 눌러서 spr_player를 선택합니다. 이렇게 하면 오브젝트에 스프라이트가 연결됩니다.

gms_script_11_게임_개발

이제 오브젝트에 스크립트 작성을 해보겠습니다. 스크립트는 GML이라는 게임메이커 전용 언어로 작성됩니다. GML은 C언어와 비슷한 문법을 가지고 있으며, 다양한 내장 함수와 변수를 사용할 수 있습니다. 스크립트 작성은 Events 탭에서 할 수 있습니다. Events는 게임에서 발생하는 여러 상황을 의미합니다. 예를 들어, Create Event는 오브젝트가 생성될 때 발생하는 이벤트이고, Step Event는 매 프레임마다 발생하는 이벤트입니다. 여기서는 Step Event에서 오브젝트에 스크립트 작성을 해보겠습니다. Step Event는 오브젝트의 지속적인 행동을 정의할 때 사용합니다. Step Event를 추가하려면 Add Event 버튼을 누르고 Step -> Step를 선택합니다. 

gms_script_12_게임_개발
gms_script_13_게임_개발

처음 스크립트 에디터를 실행할 경우 오른쪽 사진과 같이 GML CODE 에디터와 GML VISUAL 에디터 둘 중 하나를 선택할 수 있는 메시지가 열립니다. VISUAL은 DND(드래그 앤 드롭)방식의 에디터입니다. DND방식은 상당히 직관적인 방식으로 게임을 개발할 수 있으며 단 프로그래밍 언어의 이해 정도는 하셔야 구현이 가능할 듯합니다. 쉽게 말해 DND는 타이핑만 하지 않을 뿐이지, 같은 개념이라 생각하시면 되며 언어로 작성하는 GML CODE 스크립트보다는 유연하지 못하다는 단점이 있습니다.

우리는 GML CODE 에디터로 작업을 할 것이기에 왼쪽의 GML CODE를 선택하고 아래에 “Don’t ask again for this project”를 선택하고 OK 버튼을 눌러주세요. “Don’t ask again for this project”는 지금 여러분들이 작업할 프로젝트에서 앞으로 어떤 오브젝트든 스크립트 에디터를 오픈할때 이 메시지를 묻지 않겠다는 뜻입니다. 혹시나 GML VISUAL에 관심이 있으시다면 체크를 해제하고 시작하시면 되겠습니다.

gms_script_14_게임_개발

이제 아래에서 본격적으로 게임 개발을 위한 스크립트를 작성하는 기본적인 GML 프로그래밍 언어의 구조에 대해 알아보겠습니다.

GMS의 게임 개발 프로그래밍 언어 구조

변수

변수란 프로그래밍에서 데이터를 저장하고 참조할 수 있는 공간입니다. 변수에는 다양한 타입의 데이터를 저장할 수 있습니다. 예를 들어, 정수(integer), 실수(real), 문자열(string), 불리언(boolean) 등입니다. 변수를 선언할 때는 다음과 같은 형식을 사용합니다.

var 변수명 = 값;

var 키워드는 변수를 선언한다는 것을 의미하며, `=` 기호는 오른쪽의 값을 왼쪽의 변수에 할당한다는 것을 의미합니다. 세미콜론 ` ; `은 문장의 끝을 나타냅니다.
다음과 같은 코드는 `score`라는 변수에 `100`이라는 값을 저장합니다.

var score = 100;

변수에 저장된 값을 사용하려면 변수명을 다음과 예제와 같이  `score`라는 변수에 저장된 값을 show_message라는 함수를 이용하여 화면에 출력합니다.

show_message(score);

변수에 새로운 값을 할당하려면 다음 예제와 같이  `=` 기호를 사용하여 `score`라는 변수에 `200`이라는 새로운 값을 저장합니다.

score = 200;

변수의 유효 범위(scope)란 해당 변수가 참조될 수 있는 범위를 의미합니다. 게임메이커 스튜디오에서는 두 가지 유효 범위가 있습니다. 하나는 지역(local) 범위이고, 다른 하나는 전역(global) 범위입니다.

지역 범위란 해당 변수가 선언된 코드 블록 내에서만 참조될 수 있는 범위입니다. 코드 블록이란 중괄호 ` { } ` 로 둘러싸인 부분을 의미합니다. 예를 들어, 다음과 같은 코드에서 `name`이라는 변수는 지역 범위를 갖습니다.

{
var name = "Alice";
show_message(name); // "Alice" 출력
}
show_message(name); // 오류 발생

전역 범위란 해당 변수가 프로그램 전체에서 참조될 수 있는 범위입니다. 전역 범위의 변수를 선언하려면 globalvar 키워드를 사용하거나, global. 접두사를 붙여야 합니다. 예를 들어, 다음과 같은 코드에서 `level`이라는 변수는 전역 범위를 갖습니다.

globalvar level;
level = 1;
show_message(level); // 1 출력
{
var level = 2;
show_message(level); // 2 출력
show_message(global.level); // 1 출력
}

조건문

조건문이란 프로그래밍에서 특정 조건에 따라 다른 코드를 실행할 수 있도록 하는 구문입니다. 게임메이커 스튜디오에서는 if, else, else if 키워드를 사용하여 조건문을 작성할 수 있습니다. 조건문의 형식은 다음과 같습니다.

if (조건식) {
// 조건식이 참일 때 실행할 코드
} else if (다른 조건식) {
// 다른 조건식이 참일 때 실행할 코드
} else {
// 모든 조건식이 거짓일 때 실행할 코드
}

조건식이란 참 true 또는 거짓 false 으로 평가될 수 있는 식을 의미합니다. 예를 들어, 다음과 같은 식들은 모두 조건식입니다.

if (x == 10) // x가 10과 같은지 비교
if (y > 0) // y가 0보다 큰지 비교
if (z != 5) // z가 5와 다른지 비교
if (a && b) // a와 b가 모두 참인지 비교
if (c || d) // c와 d 중 하나라도 참인지 비교
if (!e) // e가 거짓인지 비교

다음과 같은 코드는 `score`라는 변수의 값에 따라 다른 메시지를 출력합니다.

if (score >= 90) {
show_message("Excellent!");
} else if (score >= 80) {
show_message("Good!");
} else if (score >= 70) {
show_message("Fair!");
} else {
show_message("Poor!");
}

반복문

반복문이란 프로그래밍에서 특정 코드를 여러 번 반복해서 실행할 수 있도록 하는 구문입니다. 게임메이커 스튜디오에서는 while, do...while, for, repeat 키워드를 사용하여 반복문을 작성할 수 있습니다. 반복문의 형식은 다음과 같습니다.

while (조건식) {
// 조건식이 참인 동안 반복할 코드
}

do {
// 최소 한 번은 반복할 코드
} while (조건식); // 조건식이 참인 동안 계속 반복

for (초기화; 조건식; 증감) {
// 조건식이 참인 동안 반복할 코드
}

repeat (횟수) {
// 횟수만큼 반복할 코드
}

다음과 같은 코드는 `i`라는 변수의 값이 1부터 10까지 증가하면서 화면에 출력합니다.

var i;
for (i = 1; i <= 10; i++) {
show_message(i);
}

함수

함수란 프로그래밍에서 특정 기능을 수행하는 코드의 묶음입니다. 게임메이커 스튜디오에서는 function 키워드를 사용하여 함수를 정의할 수 있습니다. 함수의 형식은 다음과 같습니다.

function 함수이름(매개변수) {
// 함수가 수행할 코드
return 반환값; // 선택사항
}

다음과 같은 함수는 두 수의 합을 반환합니다.

function add(a, b) {
return a + b;
}

함수를 정의한 후에는 함수이름과 괄호 안에 매개변수를 넣어서 호출할 수 있습니다. 예를 들어, 다음과 같은 코드는 add 함수를 호출하여 3과 5의 합을 화면에 출력합니다.

var result = add(3, 5);
show_message(result);

함수에는 내장 함수와 사용자 정의 함수 두 가지 종류가 있습니다. 내장 함수는 게임메이커 스튜디오에서 미리 정의해 놓은 함수로, 다양한 기능을 수행할 수 있습니다. 예를 들어, show_message 함수는 화면에 메시지를 출력하는 기능을 수행하고, random 함수는 주어진 범위 내에서 무작위 수를 생성하는 기능을 수행합니다.

사용자 정의 함수는 사용자가 직접 기능을 정의하여 사용하는 함수입니다. 위에서 예로 든 add 함수는 사용자 정의 함수입니다. 사용자 정의 함수를 사용하면 코드의 중복을 줄이고, 프로그램의 구조를 더 명확하게 만들 수 있습니다.

예제를 활용한 스크립트 구현

이제 실습을 하기 위해 간단한 예제로 여러분들도 같이 스크립트 에디터에 코드를 작성하고 오브젝트를 움직여 보도록 하겠습니다.

먼저 오브젝트를 룸(Room)에 배치를 해야합니다. Asset 브라우저에서 Rooms폴더의 왼쪽에 화살표를 클릭하여 펼쳐주세요. 그러면 Room1 이라는 룸이 보이죠. 이것을 더블클릭하면 룸 에디터가 오픈됩니다.

gms_script_15_게임_개발
gms_script_16_게임_개발

오브젝트를 드래그 하여 검정색 바탕의 룸에 배치 시키면 오브젝트에 생명을 불어넣을 준비가 모두 끝납니다. 혹시 배경이 너무 어두워서 밝게 바꿔보고싶으신 분들은 Assets 브라우저에서 Room1이 선택된 상태에서 왼쪽에 Inspector 브라우저에서 레이어 탭에 Background를 클릭하고 아래에 색상을 변경할 수 있는 Colour 부분의 검정색 막대를 클릭하면 원하는 색상으로 변경이 가능한 색상 탭이 열립니다.

// 방향키 입력을 받아서 속도를 결정하는 변수
var hsp = keyboard_check(vk_right) - keyboard_check(vk_left);
var vsp = keyboard_check(vk_down) - keyboard_check(vk_up);
// 속도에 따라서 오브젝트의 x, y 좌표를 변경하는 함수
x += hsp * 4;
y += vsp * 4;

위 코드를 똑같이 따라서 스크립트 에디터에 타이핑 하셔도 되고 복사해서 붙혀넣기 하셔도 됩니다.
이 스크립트는 다음과 같은 의미를 가집니다.

  • 첫 번째 줄에서는 주석을 작성하였습니다. 주석은 // 기호로 시작하며, 주석 뒤에 있는 내용은 실행되지 않습니다. 주석은 코드의 설명이나 메모를 작성할 때 사용합니다.
  • 두 번째 줄에서는 hsp라는 변수를 선언하고, keyboard_check라는 함수를 사용하여 오른쪽 방향키와 왼쪽 방향키의 입력 상태를 받아서 빼줍니다. keyboard_check 함수는 인자로 받은 키가 눌려있으면 1을, 아니면 0을 반환합니다. 따라서 오른쪽 방향키만 눌려있으면 hsp는 1이 되고, 왼쪽 방향키만 눌려있으면 hsp는 -1이 되고, 둘 다 눌리거나 안 눌리면 hsp는 0이 됩니다.
  • 세 번째 줄에서는 vsp라는 변수를 선언하고, keyboard_check 함수를 사용하여 아래쪽 방향키와 위쪽 방향키의 입력 상태를 받아서 빼줍니다. 이것도 마찬가지로 vsp는 아래쪽 방향키만 눌려있으면 1이 되고, 위쪽 방향키만 눌려있으면 -1이 되고, 둘 다 눌리거나 안 눌리면 0이 됩니다.
  • 네 번째 줄도 마찬가지로 주석 입니다.
  • 다섯 번째 줄에서는 x라는 변수에 hsp에 4를 곱한 값을 더해줍니다. x는 오브젝트의 x 좌표를 의미합니다. 즉, 오브젝트의 x 좌표를 hsp에 비례하게 변경해주는 것입니다. hsp가 양수이면 오른쪽으로, 음수이면 왼쪽으로, 0이면 그대로 움직입니다. 4를 곱해주는 이유는 움직임의 속도를 조절하기 위해서입니다. 4보다 큰 값을 곱하면 더 빠르게, 작은 값을 곱하면 더 느리게 움직입니다.
  • 여섯 번째 줄에서는 y라는 변수에 vsp에 4를 곱한 값을 더해줍니다. y는 오브젝트의 y 좌표를 의미합니다. 이 말은, 오브젝트의 y 좌표를 vsp에 비례하여 변경한다는 것입니다. vsp가 양수이면 아래쪽으로, 음수이면 위쪽으로, 0이면 그대로 움직이게 됩니다. 여기서도 4를 곱해주는 이유는 움직임의 속도를 조절하기 위함입니다. 4보다 큰 값을 곱하면 더 빠르게, 작은 값을 곱하면 더 느리게 움직이게 됩니다. 이렇게 해서, hsp와 vsp를 조절함으로써 사용자의 입력에 따라 오브젝트를 상하좌우로 움직일 수 있게 됩니다.

스크립트를 작성하셨다면 결과를 테스트 할 수 있는 컴파일링을 해볼 시간입니다. 그전에 약간의 설정이 필요합니다.
화면 오른쪽 상단에 과녁 아이콘을 클릭하고 열린 창에서 왼쪽에 Test 를 클릭해주세요.
이제 F5를 눌러 컴파일링을 하고 테스트 창이 뜨면 방향키로 오브젝트를 움직여보세요~

마치며…

이상으로, 게임메이커 스튜디오에서 게임 개발 단계에서 사용하는 간단한 인터페이스 조작과 스프라이트와 오브젝트를 생성하고 스크립트 에디터에서 사용할 기본적인 프로그래밍 개념인 변수, 조건문, 반복문, 함수에 대해 알아보았습니다. 이 개념들을 잘 이해하고 응용하면, 다양한 기능을 가진 게임을 만드는 데 큰 도움이 될 것입니다. 게임메이커 스튜디오의 GML 언어는 비교적 쉽게 접근할 수 있어, 프로그래밍 초보자도 충분히 활용할 수 있습니다.

다음 포스팅에서는 게임메이커로 게임 개발 시작하기 Part 5: 타일 작업과 정교한 충돌이라는 글로 다시 돌아오겠습니다!

GameMaker Studio로 게임 개발 시작하기 - 모든글 펼쳐보기
인디 게임 개발을 위한 첫걸음!

게임메이커로 게임 개발 시작하기
모든 글 보기

게임 만드는 방법에 대해 알고싶으신가요? 게임메이커 스튜디오의 게임 만드는 과정으로 여러분들의 게임 개발을 위한 열정을 시작하세요!

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to Top