대학생 메붕이는 주말이 되자 심심해졌다. 그래서 메이플 월드에서 헬로 월드를 띄워보기로 한다. (PC 기준)

1. 월드 만들기


메이플 월드를 키면 가장 먼저 보이는 화면이다. 당연히 만들기를 누른다.



게임 템플릿은 그냥 헬로 월드를 띄울거라 새로 만들기로 해줬다.

2. 맵 만들기



월드를 만들고 나면 이런 창이 뜨는데 일단 아무렇게나 맵을 만들어본다. 근데 메이플 월드는 메이플스토리의 맵을 불러오는 기능이 있다. (Windows -> MapleStory Map) 이 메붕이는 길집인 궁수 교육원에서 하고 싶어서 그 기능을 이용했다. 다시 말하지만 어차피 헬로 월드를 띄울거라 아무렇게 지형을 그려도 된다.



MapleStory Map을 클릭하면 이렇게 본가 메이플에 있는 맵들의 목록이 나온다.

뭐가 됐든 대충 맵을 만들어준다. 

3. 컴포넌트 추가 및 스크립트 작성하기

Workspace에 있는 MyDesk에서 우클릭을 한 후 Create Scripts -> Create Component를 눌러서 컴포넌트를 만들고 그걸 더블 클릭한다. 이 메붕이는 HelloWorld라는 이름으로 컴포넌트를 만들었다.



그러면 이런 창이 뜨는데 이게 스크립트 에디터다. 메이플 월드의 스크립트는 Lua 언어를 기반으로 한 코드로 이루어져 있다. 코드라는 말에서 눈치를 챘을텐데 즉 코딩을 해야 한다.

코딩을 C언어 같은걸로 시작해서 Hello World를 찍먹하다가 도망친 사람은 여기서 쫄 수도 있는데 쫄 필요 없다. Python, Lua 같은 언어들은 입문 난이도가 C보다 훨씬 낮다. 요즘 아부부들은 네이버 엔트리? 라는 것을 이용해서 코딩을 배우는 것으로 알고 있는데 거기서 사용하는 스크립트 언어가 Python이다. 그리고 Hello World는 가장 기본적인 입문 예제다.

코드를 한줄한줄 설명했다가는 도망칠테니까 일단 설명은 생략한다. Function 부분에서 +를 클릭해서 OnBeginPlay를 클릭한다.


그리고 { } 안에 log("Hello World!") 라고 작성한다. 그러고 시작해보면 아무것도 출력되지 않는다. 그 이유는 컴포넌트를 추가만 하고 사용을 안하고 있기 때문에 컴포넌트가 작동하지 않는 것이다. 너무 어렵게 생각하지 말고 쉽게 생각해보자. 실생활에서도 쓰지 않는 컴퓨터를 굳이 켜두면 전기를 낭비하는 셈이다. 그거랑 똑같다.

4. 컴포넌트 사용하기

방금 만든 이 컴포넌트를 DefaultPlayer에서 사용해보자. Workspace에 있는 DefaultPlayer를 누르고 우측 하단의 Property 부분에서 드래그를 쭉 내리면 Add Component가 있는데 이를 클릭하고 HelloWorld를 추가해준다.



그러면 이렇게 된다. Enable에 체크가 되어있는지 확인하자. 

5. 실행하기

실행을 해보자. 실행버튼을 누른다.



그러면 Console이라는 부분에 이렇게 Hello World가 찍히는 것을 볼 수 있다. 이런 것을 로그를 찍었다고 한다.

일단 당신은 도망치지 않고 Hello World!를 출력하는데에 성공했다! 참 잘했어요.

6. 코드 설명

이제 앞에서 작성한 코드를 설명하도록 하겠다.



Property라는 것은 아무리 설명해도 못 알아들을테니 패스한다.

Function은 함수를 뜻한다. 함수라는 것은 어떤 동작이 모여있는 덩어리를 뜻한다. 메창인 당신을 위해 쉽게 메생에서의 예를 들어보도록 하겠다.

당신이 재획을 할 때 하는 행동을 생각해보자. 재획비를 마시고, 경축비를 마시고, 유니온의 부를 사용하고, 경험치 쿠폰을 사용하고.. 등등을 한다. 가상으로 당신의 메생을 코딩한다고 생각하고. 1재의 과정을 코드로 나타내보자.

-- 아래와 같은 코드는 실제로 존재하지는 않는다. 그리고 --은 Lua에서 주석(설명과 같이 실행되지 않는 코드)을 달 때 사용한다.
drink(재획비)
drink(경축비)
use(유부)
use(경쿠)
turn_on(netflix)
hunt()

뭐 이런식으로 될 것이다. 근데 10재를 한다고 치자. 그러면 저 동작들을 10번 써야 한다. 근데 재획이라는 이름으로 미리 저 코드를 묶어두면, 즉 함수로 만들면 10재를 할거면 재획이라는 것만 10번 쓰면 되지 않을까? 바로 그게 함수의 개념이자 의의이다. 말 나온김에 재획 함수를 만들어보자.

재획() {
drink(재획비)
drink(경축비)
use(유부)
use(경쿠)
turn_on(netflix)
hunt()
}

이렇게 만들 수 있다(정의). 그리고 10재를 할거면 재획()을 10번 사용(호출)하면 된다. 재획 옆에 ()가 있는 이유는 함수라는 의미라고 생각하자. 정확한 이유는 매개변수가 없어서 저렇다는 것이지만 그 설명을 이해하려다 당신은 도망칠 것이다.

다시 돌아와 OnBeginPlay()라는 함수를 보자.

server only
void OnBeginPlay() {
log("Hello World!")
}

server only는 서버 전용이라는 뜻인데 자세한 설명은 생략한다.
void는 함수가 반환하는(수학으로 치면 f(x)라는 상자에 x가 들어간 뒤 상자에서 나오는) 값의 타입... 이라는 것인데 뭔소린지 이해 안가면 그냥 넘어가자. 덧붙이자면 Lua에서는 원래 저 부분이 없다. 메이플 월드 스크립트에서 추가된 문법이다.
OnBeginPlay()라는 것은 메이플 월드의 플레이가 시작될 때 호출되는 함수이다. 일반적으로 코드를 작성할 때에는 당신이 직접 원할 때에 함수를 호출하지만 메이플 월드에서 스크립트가 동작할 때는 상황에 따라 미리 정해진 이름의 함수가 호출된다. OnBeginPlay()가 바로 그런 함수 중에 하나이다. 메이플 월드 에디터 설명서에 다 적혀있다. 우리는 그 함수의 구성에 log("Hello World")라는 코드(동작)을 넣어서 플레이가 시작될 때 Hello World가 로그에 찍히도록 한 것이다.

이렇게 해서 코드 설명까지 끝났다. 당신은 기본적이면서도 중요한 Hello World를 메이플 월드에서 성공적으로 로그에 출력했다. 짝짝짝 우리 메붕이 참 잘했어요!

ps) 다른 언어 개발자들을 위한 참고사항: 자바처럼 this 말고 파이썬처럼 self를 쓰는 것 같습니다. 이게 좀 헷갈릴 수 있음. 또 헷갈릴 수 있는 것들이 있긴 한데 그건 에디터가 도와줍니다.

↓ 에디터가 도와주는 예시


ps2) 최대한 쉽게 써보려했는데.. 이해가 될지 모르겠음