언리얼엔진4에서는 모바일 게임 개발자들을 위한 무료 SDK인 UDK(Unreal Development Kit)를 제공하고 있다. 이 글에서는 UDK를 이용해서 간단한 2D 횡스크롤 액션 게임을 만들어보도록 하겠다.
UDK란 무엇인가요?
UDK는 Unreal Engine 4 의 줄임말로, 유니티 엔진과 더불어 대표적인 상용화 된 모바일 게임 엔진이다. 현재 안드로이드용으로만 출시되어 있으며, iOS용도 곧 출시될 예정이다. 기존의 C++ 언어 기반이었던 다른 플랫폼과는 달리 자바 스크립트만으로 프로그래밍이 가능하며, 별도의 설치 없이 웹 브라우저 상에서 실행되는 점이 특징이다. 또한 GUI 환경 구축 및 다양한 그래픽 효과 구현 등 전반적인 작업들이 모두 쉽고 편리하게 구성되어 있어서 초보자라도 쉽게 접근할 수 있다는 장점이 있다.
어떤 프로그램을 다운받아야하나요?
우선 아래 링크에서 UDK를 다운로드 받는다.*****************************/downloads/index.html
다운로드 받은 파일을 압축 해제하면 다음과 같은 폴더 구조를 가지고 있다.
위 그림처럼 프로젝트 폴더 내에 Assets 폴더를 생성한다. 그리고 해당 폴더 안에 resources 폴더를 생성한다.
resources 폴더 안에 원하는 이미지나 스프라이트 들을 넣어준다.
다음으로는 캐릭터 애니메이션을 설정하기 위해 Character 폴더를 생성한다.
Character 폴더 안에 Animation 폴더를 생성한다.
Animation 폴더 안에 Image 폴더를 생성한다.
Image 폴더 안에 BMP 형식의 이미지를 넣는다.
마지막으로 Sprite 폴더를 생성한다.
Sprite 폴더 안에 PNG 형식의 이미지를 넣는다.
이제 모든 준비가 끝났다. 이제 본격적으로 게임을 만들어 보자.
캐릭터 이동 방법은 어떻게 되나요?
먼저 화면 왼쪽 상단에 보이는 버튼을 클릭한다.
그러면 위 사진과 같이 메뉴가 뜨는데, Create -> Rigidbody 를 선택한다.
Rigidbody 는 물리 시뮬레이션을 위해서 반드시 필요한 컴포넌트이므로 절대 빼먹지 말고 체크해야 한다.
그리고 나서 오른쪽 하단에 Add Component... 버튼을 클릭한다.
Add Component 창이 뜨면 Movement Controller 을 선택한다.
Movement Controller 은 말 그대로 움직임을 제어하는 컨트롤러라고 생각하면 된다.
왼쪽 탭 중에서 Enable Hierarchy 부분을 체크해제 해주면 오브젝트 간의 계층구조가 없어진다.
이렇게 하면 상위 레벨의 오브젝트로부터 하위 레벨의 오브젝트로의 데이터 전달이 불가능해진다. 하지만 이렇게 하지 않으면 각 오브젝트마다 따로따로 움직이게 되므로 나중에 수정하려면 매우 번거로워진다.
따라서 처음부터 제대로 만드는 것이 좋다.
오른쪽 탭 중에서 Repeatable 항목을 체크체크!
Repeatable 항목을 체크하면 반복 동작을 지원한다는 뜻이다.
이번에는 ButtonController 라는 이름의 컴포넌트를 만든다.
ButtonController 에는 Texture 와 Icon 이라는 두 개의 컴포넌트가 들어간다.
Texture 는 배경화면이고, Icon 은 버튼 모양 아이콘이다.
버튼아이콘은 구글링하거나 직접 만들어서 넣을수도 있다.
만약 자신이 만든 앱스토어 계정이 있다면 거기서 검색해도 되고, 아니면 인터넷에서 마음에 드는 아이콘을 찾아서 넣어도 된다.
Transform 컴포넌트를 더블클릭 한 후 Name 에 적당한 이름을 붙여준다.
이름을 지어준 Transform 컴포넌트를 드래그 앤 드롭 해서 아까 만들었던 리지드바디 밑에 놓는다.
그림에서처럼 X축 방향으로 90도 회전시켜주고, Y축 방향으로 0도로 회전시켜준다.
마찬가지로 Z축 방향으로 180도 회전시켜준다.
각각의 축방향으로 각각 90도씩 회전시킨 모습이다.
여기까지가 키프레임 만들기까지의 과정이다.
키프레임이란 특정 프레임에서의 위치값을 저장했다가 다시 불러오는 방식으로 카메라 각도를 조절하는데 쓰인다.
처음엔 그냥 막 움직이다가 마지막에만 살짝 움직이면 자연스럽게 보이기 때문이다.
첫 번째 키프레임을 만들고 난 후 마우스 우클릭을 하고 Inspector 에서 Keyframe Options.. 를 선택한다.
Keyframe Options 창이 뜨면 Stop Frame 과 Start Frame 을 적절히 조정해준다.
Stop Frame 은 정지 상태에서만 적용되고, Start Frame 은 움직이는 동안 계속 적용된다.
일단 첫 번째 키프레임에선 움직이지 않도록 스톱프레임을 주고, 두 번째 키프레임부터는 움직이기 시작하도록 스타트프레임을 준다.
그럼 지금까지는 어떤 일이 일어나고 있을까?
현재 우리 눈에는 보이지 않지만 실제로는 움직이고 있는 상황이다.
즉, 실제로 플레이 했을 때 나타나는 장면은 이미 만들어진 소스코드와는 전혀 다른 형태라는 의미다.
우리가 최종적으로 만들고자 하는 건 스테이지 전체를 돌아다니는 주인공 캐릭터이기 때문에 먼저 주인공 캐릭터를 만들어야 한다.
주인공 캐릭터를 만들려면 우선 GameObject 클래스를 상속받는 새로운 클래스를 만들어야 한다.
GameObject 클래스는 Object 클래스의 서브 클래스로, 객체지향 프로그래밍 기법상 부모클래스 보다 자식클래스가 항상 크기 때문에 이를 고려한다면 당연한 결과다.
상속받은 클래스명은 SceneManager 로 정한다.
SceneManager 클래스는 씬매니저라고도 부르며, 여러개의 씬을 관리하는 역할을 한다.
씬매니저 클래스 내부에는 몇 가지 메서드가 존재하는데, 대부분 외부에서 호출되기 때문에 굳이 알 필요는 없다.
하지만 알아야 할 메서드가 딱 하나 있으니 그것은 바로 Update() 메서드다.
Update() 메서드는 매 프레임마다 호출되는데, 만약 플레이어가 일정 시간 이상 움직이지 않는다면 강제로 재시작 시켜주는 역할을 한다.
플레이어가 가만히 서 있거나 벽에 부딪히면 충돌처리를 해야 하는데, 이때 쓰이게 된다.
앞서 설명했듯이 이것저것 다 만들다보면 용량이 너무 커져서 메모리 부족 현상이 발생할 수 있으므로 가급적이면 불필요한 코드를 최소화 시켜야 한다.
지금 당장은 크게 문제되지 않겠지만 앞으로 점점 무거워지는 게임을 제작하다보면 언젠가는 이러한 오류가 발생할지도 모른다.
그래서 되도록이면 단순하면서도 효율적인 코딩을 하도록 노력해야 한다.