인스턴스하기 (이어서)

복습

인스턴스하는 것은 다양한 용도가 있습니다. 인스턴스를 통해 무엇을 할 수 있는지 간단히 살펴봅시다:

  • 씬을 여러 하위 객체로 나누어 관리하기 쉽게 하는 기능.
  • 한번에 여러 노드 인스턴스를 관리하고 편집할 수 있는 도구.
  • 복잡한 게임 흐름이나 심지어 UI마저도 묶고 조직할 수 있는 방법 (Godot에서는 UI 요소도 노드입니다).

디자인 언어

하지만 씬을 인스턴스하는 것의 가장 강력한 점은 인스턴스가 우수한 디자인 언어로써 작동하는 점입니다. 이것이 Godot와 다른 알려진 엔진들을 구분되는 특징입니다. Godot는 애초에 바닥부터 이러한 컨셉으로 설계되었습니다.

Godot로 게임을 만들 때는, MVC나 개체-관계 다이어그램과 같이 일반적으로 쓰이는 디자인 패턴을 버리고, 씬을 좀 더 자연스럽게 바라보기를 권장합니다. 게임에서 보이는 요소를 상상하는 것으로 시작하세요. 그 요소가 프로그래머가 이야기 하는 요소가 아니라 누구나 부르는 것 말이죠.

예를 들어 간단한 슈팅 게임을 다음과 같이 상상해 볼 수 있습니다:

../../_images/shooter_instancing.png

거의 모든 종류의 게임에서 이런 다이어그램을 상상해 볼 수 있습니다. 게임에서 시각화할 수 있는 부분을 쭉 적어보고, 각 구성 요소 간 소유권을 나타내기 위한 화살표를 추가합니다.

이렇게 다이어그램이 만들고 나서, 추천하는 게임 제작 과정은 다이어그램에 각 요소로 이루어진 씬을 만드는 것입니다.(코드 또는 편집기에서 직접) 인스턴스를 사용해서 소유권 관계를 만들게 됩니다.

게임을 (혹은 일반적으로 소프트웨어를) 프로그래밍할 때 가장 오래 걸리는 부분은 구조를 설계하고 게임의 구성 요소를 그 구조에 알맞게 끼워 넣는 것입니다. 이 방법을 대체하기 위해 씬을 기반으로 설계하면 게임의 논리 자체에 집중하게 되어서, 개발을 좀 더 빠르고 직관적으로 만듭니다. 대부분의 게임 구성 요소가 그대로 씬이 되기 때문에, 씬 인스턴스를 기반으로 한 설계를 사용하는 것은 다른 구조적 코드가 필요하지 않기 때문입니다.

더 복잡하게 한 번 더 살펴보겠습니다. 많은 애셋과 중첩된 요소들로 이루어진 오픈월드 게임을 보죠:

../../_images/openworld_instancing.png

방 요소를 살펴보세요. 우리가 시작하는 부분에 대해 말해봅시다. (역시 씬으로 이루어진) 가구 배치를 달리하여 서로 다른 두 가지의 방 씬을 만들 수 있습니다. 나중에는 집 내부를 방들을 연결해서 집 씬을 만들 수도 있습니다.

그런 다음 많은 인스턴스된 집들로 이루어진 성 씬을 만들 수 있습니다. 그리고 월드맵 지형에 성을 추가하는 작업을 할 수 있습니다.

나중에는 경호원 (그리고 다른 NPC)의 씬을 만들고 마찬가지로 성에 추가할 수 있습니다. 그 결과, 씬들은 게임 세상 전체에 간접적으로 추가됩니다.

Godot라면 한 번 만든 씬을 더 많은 씬으로 인스턴스하는 방식으로 작업을 쉽게 반복할 수 있습니다. 게다가 편집기 UI는 프로그래머나 비 프로그래머나 친근하게 설계되었습니다. 일반적인 팀 개발 과정에는 2D나 3D 아티스트, 레벨 디자이너, 게임 디자이너, 애니메이터가 있지만, 모두 편집기 인터페이스에서 작업합니다.

정보가 너무 많아요!

여기서 많은 고급 정보를 한 번에 제공했습니다. 하지만 이 튜토리얼의 가장 중요한 부분은 실제 프로젝트에서 씬을 어떻게 인스턴스하는 지에 대한 인식을 만드는 것입니다.

여기에서 다루는 모든 내용은 게임을 처음 만들고 개념을 적용해가면서 자연스럽게 익히게 될 것입니다. 그러니 지금은 너무 걱정하지 말고 다음 튜토리얼로 넘어가세요!