트렌드

[도전!앱개발] ‘언리얼4’로 하루만에 만든 카드게임

2014.05.19

고백합니다. 저는 원래 개발자의 길을 걸을 운명이었습니다. 대학에서 정보통신공학을 전공한 ‘공돌이’이기 때문입니다. 적잖은 친구들은 지금 개발자의 길을 걷고 있습니다. 운명의 발목을 잡은 것은 부족한 노력과 못난 재능이었습니다. 대학 시절 내내 배운 ‘C++’과 ‘자바’ 언어 중 지금 기억나는 것이라고는 “Hello World”뿐입니다. 컴퓨터와 대화하는 개발자 대신 사람과 대화하는 기자의 길을 골랐습니다.

헌데, IT 전문 매체에서 기자의 취재활동은 대개 개발자를 만나는 일입니다. 혹은 개발자가 9할이 넘는 스타트업을 방문하는 일이죠. “저도 사실 전공은…”이라며 개발자를 만날 때마다 머리를 긁적이긴 했지만, 사실 개발과 관련해서는 아는 바가 적습니다. 말하자면, 개발 근처에도 가보지 않은 기자가 기술과 개발자를 취재하겠다며 나서고 있는 꼴입니다. 한걸음 멀리서 그런 저를 바라보니 한심하기 그지없더군요. 공대 출신 기자가 남몰래 쌓아 온 일종의 부채의식이기도 합니다.

개발에 도전해 보기로 했습니다. 누군가의 도움을 받아도 좋으니 제가 만든 응용프로그램(앱)을 손에 쥐어 보고 싶었습니다. 엉성한 앱 하나 만들었다고 마음 속 부채가 탕감될 리 없다는 거, 잘 알고 있습니다. 다만 앞으로도 계속 개발자와 스타트업을 만나는 데 좋은 경험이 되면 좋겠다고 생각했습니다. 무엇이 좋을까 고민하다 게임으로 결정했습니다. 게임 개발엔진 ‘언리얼엔진’으로 안드로이드 게임을 직접 만들어 봤습니다. 꼬박 하루 동안 완성한 안드로이드 스마트폰용 게임 개발 체험기입니다. 저의 체험이 비전공자도 개발에 도전할 수 있다는 희망의 메시지가 되길 바랍니다.

unreal_1_600

‘카드게임’ 만들어 볼까요?

에픽게임즈가 최근 ‘언리얼4’를 발표했습니다. 언리얼엔진4의 가장 큰 특징은 ‘쉬운 개발’입니다. 모든 게임 개발 과정을 한글로 번역했고, 개발을 전문적으로 배우지 않은 게임 디자이너나 기획자도 쉽게 프로그램을 이해할 수 있도록 했습니다.

언리얼4의 백미는 바로 ‘블루프린트’라는 개념입니다. 블루프린트는 언리얼4에서 게임을 만드는 과정을 눈으로 볼 수 있도록 도와주는 도구입니다. 외계어처럼 보이는 복잡한 소스코드 대신 도형을 보며 프로그램을 만들 수 있도록 말입니다. 결론부터 얘기하면, 언리얼4로 도전한 ‘카드게임’을 만드는 데 꼬박 5시간이 걸렸습니다. 놀라운 것은 게임을 완성하는 동안 흔히 ‘짠다’라고 표현하는 소스코드는 단 한 줄도 작성하지 않았다는 점입니다. 복잡한 기능이 들어간 게임은 물론, 소스코드도 따로 필요합니다. 하지만 언리얼4는 소스코드 없이도 게임의 기본적인 동작을 모두 표현할 수 있을 만큼 쉽게 설계돼 있었습니다. 소스코드 없이 도형을 만들고 배치하는 것만으로 프로그래밍을 할 수 있으니, 개발 진입 장벽도 낮았습니다.

언리얼4로 도전한 카드게임은 안드로이드폰에 얹는 것을 목표로 했습니다. 기본적인 게임의 흐름은 다음과 같습니다. 화면에 몇 장의 카드가 배치되면, 게이머는 똑같은 모양의 카드 3장을 고릅니다. 게이머가 선택한 카드가 만약 똑같은 그림이라면, 카드는 사라지고 그 자리를 다른 카드가 무작위로 채웁니다. 한 번 성공할 때마다 점수를 얻는 방식입니다. 선택한 카드가 똑같은 그림이 아니라면, 선택이 취소됩니다. 기초 수준의 터치조작만 지원하는 게임이지만 게임의 요소와 상호작용, 결과값 표시 등 게임이 갖춰야 하는 것은 모두 담고 있습니다.

개발에 필요한 카드 그림과 음악 효과 등 자원은 모두 ‘마켓플레이스’에 공개돼 있습니다. 마켓플레이스는 에픽게임즈가 언리얼4에서 처음으로 추가한 기능입니다. 개발자가 만든 게임 제작 자원을 공유할 수 있도록 한 일종의 게임 소스 장터입니다. 무료로 등록된 자원을 활용해 게임 제작의 기초를 배울 수 있으니 초보자도 유용하게 활용할 수 있습니다.

언리얼4는 모든 메뉴가 우리말로 돼 있습니다. 뿐만 아니라 게임에 필요한 그림이나 음악 등 개발에 필요한 자원도 한글로 파일 이름을 쓸 수 있습니다. 에픽게임즈코리아는 유튜브에 등록된 70여개의 언리얼4 활용법 동영상에도 우리말 자막을 추가하고 있습니다. 언리얼엔진이 상대적으로 배우기 어렵다는 인식은 앞으로 많이 개선될 것으로 기대됩니다.

unreal_2_600

신광섭 에픽게임즈코리아 과장

unreal_8_600

‘언리얼4’에 ‘마켓플레이스’가 추가됐습니다. 개발도구 버전도 자동으로 판올림할 수 있습니다.

unreal_10_600

‘언리얼4’의 기본 화면 구성

“소스코드 필요 없어요”

“다른 게임 개발 엔진처럼 ‘변수’나 ‘함수’와 같은 기초적인 프로그래밍 개념은 당연히 있지요. 하지만 그 과정은 모두 블루프린트가 대신해 줍니다. 소스코드 한 줄 쓰지 않고 게임을 만들 수 있어요.”

앱 개발에 도움을 준 신광섭 에픽게임즈코리아 과장은 “언리얼4는 게임 아티스트나 기획자도 프로그래머와 함께 작업할 수 있도록 고안됐다”라고 설명했습니다.

블루프린트는 변수와 함수를 담은 일종의 도형입니다. 프로그래밍에서 변수는 ‘명사’, 함수는 ‘동사’라고 생각하면 됩니다. 개발자가 선언한 변수가 응용프로그램 안에서 어떻게 동작하도록 할 것인가를 함수로 결정하기 때문입니다. 프로그래밍은 변수와 함수가 유기적으로 엮이도록 하는 반복작업인 셈입니다. 많은 개발도구는 프로그래머가 직접 변수를 선언하고 함수를 짜 넣어야 합니다. 개발자의 모니터를 수놓는 수많은 영문 코드가 바로 스크립트입니다. 하지만 언리얼4는 스크립트를 짜 넣을 필요가 없습니다. 마우스를 클릭해 도형을 만들고, 도형과 도형을 선으로 연결하는 것만으로 기본적인 프로그래밍을 할 수 있습니다. 스크립트에 익숙한 개발자도, 스크립트를 전혀 모르는 앱 디자이너도 쉽게 언리얼4로 소통할 수 있는 것은 바로 블루프린트 덕분입니다.

콘텐츠 브라우저에서 블루프린트를 하나 생성하고, ‘게임 모드’를 선택했습니다. 게임 모드는 게임 속에서 필요한 기능을 정의해주는 역할을 합니다. 게임 모드에서 결정한 게임 기능은 하위 레벨에 반영됩니다. 각 게임에 필요한 기능이 천차만별인데, 매번 똑같은 기능을 새로 프로그래밍할 필요가 없습니다. 개발 속도를 높이는 언리얼4의 중요한 특징 중 하나입니다.

이번에 도전한 카드게임은 시점이 움직일 필요가 없습니다. 대신 클릭과 터치 조작에 반응하도록 해야 합니다. 게임 조작 방식은 블루프린트를 하나 더 만들어 게임 조작과 관련된 노드를 추가해주면 됩니다. 처음으로 만든 블루프린트의 ‘플레이어 컨트롤러’ 항목에서 조작법을 프로그래밍한 블루프린트를 선택하기만 하면 됩니다.

카드를 배치할 때는 무작위(Random)로 배치되도록 해야 합니다. 블루프린트에서 카드 그림을 불러온 다음 게임이 시작되면 카드 그림이 무작위로 불러오도록 하는 과정도 노드를 추가하는 것으로 마칠 수 있습니다. 카드 3장을 고르고, 선택된 카드끼리 서로 같은 그림인지도 컴퓨터가 계산할 수 있도록 하면 카드게임의 기본 골격은 완성됩니다.

unreal_3_600

‘블루프린트’에서 ‘노드’를 만들고 서로 엮는 것이 언리얼4의 기본 개발 과정입니다.

unreal_7_600

‘노드’는 마우스 클릭만으로 추가하고, 연결할 수 있습니다. 기초 개발 과정이라면, 스크립트를 짜지 않아도 됩니다.

unreal_4_600

게임을 조작하면, 사용자의 입력이 프로그램 안에서 어떻게 흐르는지 볼 수 있습니다.

안드로이드용 게임 앱으로 바로 출시

‘카드 게임’은 게이머가 스마트폰 화면을 터치해 카드를 고르는 게임인 만큼 게이머가 선택한 카드가 어떤 것인지 한눈에 알아볼 수 있도록 하면 좋습니다. 선택된 카드 색깔을 바꾸는 방법이 효과적입니다. 선택된 카드에 특별한 변화가 생기도록 이벤트를 추가해야 한다는 뜻입니다. ‘카드 게임’에서는 빨간색으로 바뀌도록 했습니다.

정보는 선택된 카드가 최상위 ‘게임 모드’에 자기가 어떤 카드인지 알려주는 쪽으로 흐릅니다. 최상위 게임 모드에서 선택된 카드 3장이 같은 카드인지 다른 카드인지 계산할 수 있도록 말이죠.

‘분기 노드’가 블루프린트 안에서 옳고 그름을 판단하는 역할을 합니다. 카드 3장이 선택됐을 때 모두 같은 카드면 ‘참(True)’이 됩니다. ‘참’이면, 선택된 카드는 사라지고 빈자리를 다른 카드가 무작위로 채우게 됩니다. 다른 그림이 그려져 있는 카드 3장을 고르면, 분기 노드에서 ‘거짓(False)’으로 갈립니다. 컴퓨터가 ‘거짓’으로 판단하면, 빨간색으로 색이 변한 카드를 다시 원래 색상으로 되돌립니다. 당연히 점수가 기록되지 않습니다.

개발 과정 중 생긴 오류는 어떻게 찾아 고쳐야 할까요. 언리얼4의 블루프린트는 사용자의 명령이 프로그램 속에서 어떻게 흘러가는지 시각적으로 보여줍니다. 카드를 터치하고 명령이 전달되는 과정을 노드와 노드 사이를 잇는 선에 보여준다는 뜻입니다. 프로그램이 원하는 방향으로 동작하지 않을 때 정보의 흐름이 막힌 부분을 눈으로 보며 쉽게 수정할 수 있습니다.

완성된 프로그램은 안드로이드용 스마트폰으로 바로 뽑아볼 수 있습니다. 이를 ‘패킹’이라고 부릅니다. 안드로이드 기기를 개발에 쓴 컴퓨터에 연결해두면, 설치부터 실행까지 자동으로 해주니 편리합니다. 물론 안드로이드용 설치 파일(확장자 apk)로 뽑아볼 수도 있습니다. 구글에 등록한 개발자라면, 바로 구글플레이에 앱을 등록할 수 있습니다.

프로그래밍 기초는 알아야

언리얼4가 제아무리 소스코드 없이 앱을 만들 수 있는 도구라해도 각각의 노드가 어떻게 연결되는지는 알아야 합니다. 언리얼4에서는 노드를 추가하는 것 자체가 프로그래밍 과정이기 때문입니다. 어떤 기능을 가진 노드를 추가해 다른 어떤 노드와 연결해야 할지 판단하는 것은 개발자의 몫입니다. 판단의 기본에는 변수와 함수로 이루어진 스크립트가 깔려 있습니다. 노드는 스크립트를 시각적으로 보여주는 도구일 뿐입니다.

카드게임을 완성하기까지 총 5시간이 걸렸습니다. 오전에 에픽게임즈로 출근하다시피 해 오후 4시께 게임을 완성했으니 하루를 꼬박 투자한 셈입니다. 프로그래밍 경험이 전혀 없었다는 점을 생각하면, 그래도 좀 빠르게 완성한 편입니다. 블루프린트와 노드로 대표되는 시각화 도구가 없었다면, 이렇게 빨리 안드로이드용 게임 하나를 뚝딱 완성하기는 어려웠을지도 모릅니다. 노드의 기저에 스크립트가 깔려있다고는 해도 개발자가 개발 중인 프로그램을 도형으로 볼 수 있다는 점은 분명 진입장벽을 낮추는 요소입니다. 에픽게임즈가 언리얼4에서 강조하는 특징이기도 합니다.

이번 카드게임 개발을 옆에서 도와준 신광섭 과장은 “실제로 에픽게임즈코리아의 한 디자이너는 혼자 힘으로 ‘플래피버드’를 본따 게임을 만들었다”라고 설명하기도 했습니다. 프로그래밍은 이제 더이상 전문 프로그래머만의 영역이 아닙니다.

unreal_6_600

안드로이드 스마트폰에 ‘카드 게임(Card)’을 설치한 화면

unreal_5_600

‘카드 게임’ 실행 모습

[youtube id=”-0hAKpe4eY4″ align=”center”]

오원석 기자가 만든 ‘카드 게임’ 실행 동영상 보기(링크)

sideway@bloter.net

기술을 이야기하지만, 사람을 생각합니다. [트위터] @Sideway_s, [페이스북] facebook.com/sideways86, [구글+] gplus.to/sideway [e메일] sideway@bloter.net