코딩엔 무능, 그래도 게임은 만듦
작성자: 제이 웨스턴 (Jay Weston) 작성일: 2012 년 12 월 5 일
여러분이 기획자나 아티스트라면, 코딩은 자신이 가진 재능과는 아주 반대편에 있는 거라고 느끼고 있을 겁니다. 저도 마찬가지였거든요! 게임 기획에 열정을 갖고 있는 사람이라도, 코딩 없이는 게임을 만들 수 없습니다. 그렇죠? 하지만 유니티(Unity)와 플레이메이커(Playmaker, 유니티용 비주얼 스크립팅 시스템)와 같은 툴을 쓰면, 꼭 그렇지 않을 수도 있습니다.
저는 몇 년간 바이너리 스페이스(Binary Space)의 프로그래머 겸 CTO 인 잭슨 드루스(Saxon Druce)와 함께 <좀비 아웃브레이크 시뮬레이터(Zombie Outbreak Simulator)>와 <제 3 급 전염병(Class 3 Outbreak)> 두 개의 작품에 파트타임으로 참여한 적이 있었습니다. 그 후에 이력서 경력란에 채워 넣을 게임을 찾고 있었는데, 규모가 작고 완성 가능한 것이어야 했죠.
<좀비 아웃브레이크 시뮬레이터>를 iOS 로 포팅할 때 iOS 용 게임을 많이 해 봤는데, 그 중 <타이니 윙(Tiny Wings)>이 제 마음을 사로잡았습니다. 게이머의 입장에서 보면, 이어지는 점프를 정확히 해낼 때 무아지경에 드는 느낌이 정말 좋았습니다. 사업적 측면으로 보면, 기본적으로는 단 하나의 레벨에 극히 간단한 게임플레이만을 갖고 있기에 개발 기간이 짧다는 점이 마음에 들었습니다.
몇 가지 아이디어를 가지고 실험을 해보다가, <타이니윙>을 1 인칭 시점의 3 차원 게임으로 만들어 보기로 결정했습니다. 유니티만 사용해서 해봤는데, 지형 엔진에 공 하나를 굴러가게 하려고 기초적인 물리 코드와 씨름해야만 (웃지 마세요) 했고, 1 주 정도 지난 후에야 원하는 결과를 얻을 수 있었죠.
하지만 세상에서 제일 무능한 코더가 하는 일이라 진행은 더뎠고 짜증만 치밀어 올랐습니다. 3 차원 물리학과 벡터는 물론이거니와, 유니티 자체와, 거기에 자바스크립트에도 골머리를 썩여야 했죠. 물론 세상에는 별다른 문제 없이 스크립트 코드를 다룰 수 있는 기획자도 많겠지만, 나와는 거리가 먼 이야기였고, 이쪽 분야를 배우려면 개발은 접어두고 연습하고 공부하며 몇 년을 보내야 할 텐데, 32 살 나이엔 쉽지 않은 이야기죠!
플레이메이커 입성
어쩌다 보니 - 유니티 애셋스토어를 살펴보던 중이었던 것 같은데 - 플레이메이커를 발견했습니다. 플레이메이커는 비주얼 스크립팅 시스템이자 스테이트 머신 관리자로써, 상태(행동 action 의 집합. 각 행동은 미리 작성된 짧은 코드)와 그 사이의 전이로 게임을 만들 수 있게 해줍니다. 간단한 예를 들자면, “전투중”, “대기중”, “이동중” 등의 상태를 가진 유한 스테이트 머신(finite state machine, FSM)을 캐릭터에 붙이는 식입니다.
각각의 상태에는 애니메이션 행동이나, 레이캐스팅/사격 행동, 이동 행동 등을 포함시킬 수 있습니다. 하나의 상태에서 다른 상태로의 전이는 이벤트를 통해 이루어집니다. 예를 들자면 “대기중” 상태에 왼쪽 마우스 클릭에 반응하는 액션을 추가하고, 왼쪽 버튼을 클릭하면 “사격중” 상태로 전이하는 이벤트가 발생하게 만들 수 있습니다. 상태에 들어가는 각 행동은 기본적으로 미리 작성된 짧은 코드이고, 여러분은 이를 조합하고 다듬어서 개별 스테이트 머신을 만들 수 있고, 궁극적으로 전체 게임까지도 만들 수 있는 것이죠.
플레이메이커의 실험실 예제. 단순한 문열기/문닫기를 제어한다.
위 그림을 보면, 기술적 지식이 없는 사람에게는 이와 같은 비주얼 스테이트 머신이 얼마나 강력한 지 알 수 있을 겁니다. 제가 코드를 들여다보아도 그냥 검은 것은 글씨고 흰 것은 배경이다 정도만 알 수 있을 뿐이고, 언제 발동되는지, 어느 시점에 어떤 일을 하는지 이해해 보려고 해도 아무 소득이 없을 겁니다. 하지만 플레이메이커를 쓰면, 전체 FSM 을 한눈에 보고 무엇을 하는 건지 즉시 이해할 수 있죠.
편집기뿐 아니라 게임 화면에서도 각 오브젝트가 속해 있는 상태를 보여주기 때문에 실시간으로 어떤 일이 벌어지는 지 볼 수 있습니다. 이를 통해 FSM 은 물론 게임 전체적으로 무슨 일이 일어나고 있는 지를 이해하고 디버깅하는데 주는 이점은 말로 다 표현할 수 없을 지경입니다. 여기에 더하여 보조선, 브레이크 포인트 등과 같은 기능으로 무슨 일이 벌어지고 있는지 매우 명확히 이해할 수 있게 됩니다.
플레이메이커를 써서 제 첫 번째 창작물을 (거의 혼자서) 완성할 수 있었습니다. 제목은 <미지의 궤도(Unkown Orbit)>이고, 초현실적 3 차원 행성계에서 혜성이 되어 부유하고, 점프하고, 날아다니는 게임이죠. 파트타임으로 작업했기에 1 년 정도 걸렸는데, 풀타임으로 작업했다면 6 달이면 됐으리라는 생각이 듭니다. 게다가 지금은 유니티와 플레이메이커에 대한 이해도가 높아진 걸 감안하면, 이 게임을 다시 만든다면 몇 달 안 걸릴 것 같다는 생각이 듭니다.
미지의 궤도
미지의 궤도에 쓴 FSM 중 플레이어가 눈덩이를 집을 때의 상황을 예로 들어 보겠습니다. 왼쪽에는 상태 사이의 이동을 제어하는 상태와 전이를 보여주고 있습니다. 가운데에서는 “자폭” 행동에 포함된 행동들을 보여주고 있습니다. 이 FSM 에서는 플레이어가 눈덩이를 향해 비행해서 이를 집어 들면, “눈 추가”라는 이벤트가 발송됩니다.
<미지의 궤도>에서 눈덩이 아이템에 쓰인 스테이트 머신
혜성 오브젝트는 이 발송된 이벤트를 “전역 전이”를 통해 수신 받고, 혜성의 얼음핵 반지름을 증가시키는 상태로 진입합니다.
<미지의 궤도>에서 얼음/눈 오브젝트에 쓰인 스테이트 머신
※ 자세한 내용은 첨부(PDF)화일을 참고하시기 바랍니다.
|