고도 4 소개

옮긴이 머리말

게임의 대규모 개발이 가능한 이유는 게임엔진이 존재하기 때문에 간으한 것이다. 개발팀 전체의 기술 이해도와 작업 방식, 그리고 작업 결과물의 형식을 하나의 ‘표준’으로 통일시킴으로써 팀 전체의 의사소통을 원할하게 한다는 엄청난 혜택이 있다.

게임엔진이 거의 필수요소로 자리잡으면서 엔진은 더욱 깊어지고 심화되게 되었는데, 문제는 학생이나 작은 인디게임팀에서 다루기에 너무 크고 비싼 비용이 발생한다는 점이다. 이러한 상황에서 고도엔진은 아주 좋은 대안이다.

오픈소스라는 특징과 가볍고 복잡한 라이선스 문제가 없으며 실제로 기여자로 참여하여 직접 개선까지 할 수 있다. 사용법이 어렵지 않기 때문에 좀 더 많은 국내개발자들이 사용해보면 좋을 것이다.

고도 엔진 소개

시작을 위한 조언

가능하다면 이 책의 프로젝트 순서를 따라가는 것이 좋다. 이전 장에서 소개한 주제를 더 자세히 설명하는 경우가 있다. 또한 처음 새로운 엔진을 접하게 되면 습득해야할 자료가 매우 많기 때문에 너무 많이 한번에 이해할려고 하지 말고 조금씩 익혀나가는 것이 좋다.

코드를 복사하여 붙여넣기를 하고 싶어도 참고 직접 타이핑을 해보는 것이 좋다. 이렇게 하면 코드를 이해하는데 도움이 된다. 가장 초보 개발자가 많이 하는 실수인 감당할 수 없는 큰 프로젝트를 맡거나 기획하여 진행하는 것이다. 작은 게임을 두 세개 완성하는 편이 더 성공적이다.

따라서 이 책에 나오는 프로젝트는 위의 전략을 엄격하게 따르고 있다. 기본을 연습하며 책을 따라가다. 추가 기능이 생각날 것인데, 가능하다면 프로젝트가 완성되고 나서 추가해보는 것을 추천한다.

효과적인 학습 비결

이 책의 프로젝트를 최대한 활용하고 그 과정에서 향상된 스킬을 오래 간직할 수 있는 비결을 밝힌다. 각 장 마지막에서 게임 프로젝트의 제작이 끝나면 즉시 삭제하고 다시 시작해보는 것이다. 이 때, 막히는 부분만 따로 살펴보거나 취향대로 기능을 추가하며 제작해보자.

이후에 각 게임마다 여러 번 반복하다 보면 책을 확인하는 횟수가 눈에 띄게 줄어들 것이다.

게임 엔진이란 무엇인가?

게임 개발은 복잡하고, 다방면의 지식과 스킬이 필요하다. 요즘에는 게임을 제작하려면 실제 게임 제작에 들어가기도 전에 대량의 기반 기술부터 필요하다. 게다가 모든 게임에 공통되는 요구 사항도 많다.

  • 게임 프레임워크: 게임의 기본적인 부분을 구축하는 데 도움이 되는 헬퍼 코드가 포함된 라이브러리의 집합이다. 그렇다고 모든 부품을 제공하는 것은 아니며, 모든 요소를 하나로 묶기 위해서는 코드를 훨씬 더 많이 작성해야 할 수도 있다.
  • 게임 엔진: 새 게임 프로젝트마다 바퀴를 재발명할 필요가 없도록 게임 제작 과정을 간단히 할 수 있는 설계된 툴과 기술의 모음이다. 흔히 쓰이는 기능을 제공하며, 그런 기능 중에는 개발하는 데 상당한 시간과 노력을 투자해야 하는 것도 많다. 주요 기능들은 다음과 같다.
    • 렌더링: 렌더링이란 게임을 플레이어의 화면에 표시하는 과정이다. 최신 CPU 지원, 고해상도 디스플레이, 조명, 원근, 뷰포트 같은 효과를 고려하면서도 이 모든 것을 매우 높은 프레임 속도로 유지해야 좋은 렌더링 파이프라인이라고 할 수 있다.
    • 물리: 매우 흔한 요구사항임에도, 견고하고 정확한 물리엔진을 구축하는 일은 어마어마한 과업이다. 대부분의 게임에는 어떤 종류가 됐든 충돌 감지 및 대응 시스템이 필요하며, 물리 시뮬레이션이 필요한 게임도 많다.
    • 플랫폼 지원: 오늘날의 시장 상황에서는 대부분의 개발자가 데스크톱, 콘솔, 모바일, 웹 등의 여러 플랫폼에 게임을 출시할 수 있기를 바란다. 겡미 엔진은 여러 플랫폼에 게임을 퍼블리싱할 수 있게 통합된 내보내기 프로세스를 제공해서, 게임 코드를 다시 작성하거나 다시 컴파일할 필요가 없도록 해준다.
    • 공통 개발 환경: 동일한 통합 인터페이스를 사용하여 여러 게임을 제작함으로써, 개발자는 새 프로젝트를 시작할 때마다 새로운 워크플로를 다시 배울 필요가 없다.

여기에 추가로 애니메이션, 네트워킹, 리소스 관리, 디버깅 등의 기능을 지원하며 이외에도 게임엔진 성격에 따라 특화된 기능들이 다 다를 수 있다.

게임 엔진을 사용하면 개발자는 게임 제작에만 집중할 수 있고, 게임을 작동하는 데 필요한 기반 프레임워크를 만드는 일은 엔진에 떠넘길 수 있다.

고도란 무엇인가?

고도는 이전에 설명한 모든 기능에 추가로 다른 것까지 제공하는 최신 게임 엔진이다. 게다가 완전 무료 오픈소스이며, 매우 융통성 있는 MIT허가서에 따라 출시됐다. 이는 100% 무료로 사용할 수 있으며, 고도 엔진을 사용하여 만든 게임을 판매할 수 있다는 것을 의미한다.

고도 다운로드

고도 엔진은 공식 홈페이지나 깃허브 또는 스팀을 통해 받을 수 있다.

고도 UI 개요

대다수 게임 엔진과 마찬가지로, 고도는 통합 개발 환경을 제공한다. 이는 게임의 모든 측면에서 동일한 인터페이스를 사용해 작업한다는 뜻이다.

프로젝트 매니저

Project Manager창은 고도를 열었을 때 가장 먼저 보게 될 창이다.

프로젝트를 만들 때 렌더러도 고를 수 있는데, 3가지 옵션이 존재한다. 최신 데스트크톱 GPU가 필요한 최첨단 고성능 그래픽에서부터 모바일이나 구형 데스크톱과 같이 성능이 낮은 플랫폼과의 호환성 사이의 균형을 나타낸다.

이 옵션은 나중에 변경할 수 있으니 기본 설정으로 두어도 된다.

파일 이름은 간단한 몇 가지 규칙이 있다. ‘위저드 배틀 아레나’가 ‘게임 2호’보다 훨씬 좋은 이름이다. 또한 프로젝트 명은 운영체제마다 다르게 보일 수 있기 때문에 영문과 공백을 제외하여 이름을 지어 일관성을 유지한다.

윈도우 운영체제 버전을 사용한다면 콘솔버전으로 실행하여 오류를 쉽게 찾을 수 있다.

에디터 창

다른 게임엔진과 마찬가지로 가장 게임제작에서 많이 사용하게 될 에디터 창이다.

에디터 창의 대부분은 뷰포트로 실제 제작하는 게임의 시각적인 부분을 확인할 수 있다. 상단에는 작업 공간이 위치하고 있으며 쉽게 스크립트 모드, 2D, 3D 모드로 전환할 수 있다. 툴바 아이콘은 현재 작업중인 오브젝트의 종류에 따라 달라진다. 상단 오른쪽은 플레이테스트 영역으로 게임을 실행하고 테스트할 수 있다.

왼쪽과 오른쪽의 독 또는 탭이 있어 게임 아이템을 선택하거나 속성을 선택하는데 사용할 수 있다. 왼쪽 하단에는 파일시스템탭으로 모든 파일을 볼 수 있다. 프로젝트의 모든 리소스는 res://로 시작하는 상대경로로 참조할 수 있다.

왼쪽 독 상단에는 씬탭이 있는데 현재 뷰포트에서 작업중인 씬을 보여준다. 오른쪽 옆에는 인스펙터로 게임 오브젝트의 속성을 보고 결정할 수 있다.

노드와 씬

노드는 고도에서 게임을 만들기 위한 기본 빌딩 블록으로서, 특화된 게임 기능을 다양하게 제공하는 오브젝트다. 노드 유형에 따라 이미지를 표시할 수도, 애니메이션을 재생할 수도, 3D 모델을 나타낼 수도 있다. 노드에는 속성 모음이 포함되어 있어 그 동작을 커스터마이징할 수 있다.

어떤 노드를 추가할지는 어떤 기능이 필요한지에 달려 있다. 노드는 게임 오브젝트 제작에 유연성을 주도록 설계된 모듈식 시스템이다. 추가하게 되는 노드는 트리 구조로 정돈되며, 트리 안에서 한 노드는 다른 노드의 자식으로 추가된다. 특정 노드는 몇 개든 가질 수 있지만 부모 노드는 1개만 가질 수 있다.

노드 집단이 모여 트리가 되면 이를 씬이라고 한다. 고도의 씬은 일반적으로 프로젝트 안의 다양한 게임 오브젝트를 생성하고 구조화하는 데 사용된다. 플레이어 씬을 만들어서 플레이어의 캐릭터를 작동하게 하는 모든 노드와 스크립트를 포함한다고 하면 그다음에는 게임 맵을 정의하는 또 다른 씬을 만들 수 있다.

이러한 씬을 결합하여 동작하는 게임을 만들어 낼 수 있다. 노드에는 다양한 속성과 기능이 붙지만, 어느 노드든 스크립트를 붙여 동작과 역량을 확장할 수 있다. 이 덕분에 노드가 기본상태일 때 가능한 것보다 더 많은 작업을 수행하도록 코드를 작성할 수 있다.

노드는 강력한 툴이며, 이를 이해하는 것이야말로 고도에서 게임 오브젝트를 효과적으로 제작하는 비결이다. 하지만 노드 자체만으로 많은 것을 할 수 없다. 즉, 게임로직을 제작하는 것은 여전히 개발자의 몫이다.

고도에서의 스크립팅

고도는 노드 스크립팅용 공식 언어를 2가지 제공한다. 바로 GDScript와 C#이다. GDScript는 전용 내장 언어라서 엔진과 가장 긴밀하게 통합되어 있으며 사용하기도 직관적이다. 그렇지만 C#은 이미 친숙하거나 능숙하다면 사용할 수 있다.

실제로 고도는 C++로 제작되었으며 엔진 기능을 직접 확장해 더 높은 성능과 통제력을 얻을 수 있다. 언어는 GDScript로 충분하며 고도의 애플리케이션 프로그래밍 인터페이스와 긴밀하게 통합되어 있으며 개발을 빨리 할 수 있게 설계되어 있다.

GDScript

GDScript의 구문은 파이썬과 매우 가깝게 모델링했기에, 파이썬에 이미 친숙하다면 GDScript도 매우 친숙하게 느껴질 것이다. 다른 동적언어에 익숙하여도 쉽게 배울 수 있다.

즉, 파이썬과 마찬가지로 동적 타입 언어이기에 변수를 생성할 때 타입을 선언할 필요가 없다는 뜻이며, 공백을 통해 코드 블록을 나타낸다.

extends Sprite2D
var speed = 200

func _ready():
    position = Vector2(100, 100)

func _process(delta):
    position.x += speed * delta

요약

이 장에서는 게임 엔진의 일반적인 개념과 고도의 특징에 대하여 소개했다.

태그: ,

카테고리:

업데이트:

댓글남기기