인스턴스(계속)

요약

인스턴스는 매우 다양하게 쓰입니다. 인스턴스를 통해 무엇을 할 수 있는지 간단히 살펴봅시다:

  • 관리하기 편하게 하기 위해 씬들을 여러 하위 객체로 나눌 수 있는 것.
  • 한번에 여러 노드 인스턴스를 다루고 편집할 수 있는 도구.
  • 복잡한 게임 플로우나 심지어는 UI를 구조화하고 내장하는 방법 (Godot에서는 UI의 원소들마저도 노드입니다).

디자인 언어

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

Godot로 게임을 만들 때에는 통상적으로 쓰이는 디자인 패턴들 (MVC 혹은 개체-관계 다이어그램 등) 을 버리고 씬을 좀 더 자연스럽게 바라보기를 권장합니다.

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

../../_images/shooter_instancing.png

무슨 게임을 디자인하든, 위와 같은 다이어그램을 그릴 수 있을 것입니다. 게임에서 시각화할 수 있는 부분들을 쭉 적어보고, 각 컴포넌트들의 소유권을 나타내주기 위한 화살표를 추가해줍니다.

다이어그램이 완성되었다면 게임을 만들 때 다이어그램에 있는 요소들에 대응되는 씬을 만들기를 권장합니다. 여기서 (코드를 사용해서, 아니면 에디터에서 직접) 인스턴스를 사용할 것입니다, 소유 관계를 위해서 말입니다.

게임을 프로그래밍할 때 (혹은 일반적으로 소프트웨어를 짤 때) 가장 오래 걸리는 부분은 구조를 디자인하고 게임의 컴포넌트들을 그 구조에 알맞게 끼워 넣는 것입니다. 이 방법을 대체하는 것으로 씬을 기반으로 디자인하는 것은 게임의 논리 자체에 신경 쓸 수 있게 되어 개발을 좀 더 빠르고, 간단하게 만듭니다. 대부분의 게임 컴포넌트가 그대로 씬이 되기 때문에 씬 인스턴스를 사용하게 되면 구조 디자인에 따른 구조적인 코드가 딱히 필요하지 않기 때문입니다.

좀 더 복잡한 예시를 들어보겠습니다. 한 번 에셋들도 많고, 중첩된 원소들이 많은 오픈월드 게임을 살펴보죠:

../../_images/openworld_instancing.png

방 원소를 살펴봅시다. 우리가 시작하는 부분에 대해 말해봅시다. 우리는 가구 배치를 달리하여 서로 다른 두 가지의 방 씬을 만들 수 있습니다. 나중에는, 방들을 연결해서 집 씬을 만들 수도 있습니다.

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

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

Godot라면, 당신은 씬을 만들고 그것을 인스턴스하면 되니까 작업을 쉽게 반복할 수 있습니다. 게다가, 에디터 UI는 프로그래머나 비 프로그래머에게도 친근하게 디자인 되었습니다. 전형적인 개발 팀은 2D나 3D 아티스트, 레벨 디자이너, 게임 디자이너, 애니메이터를 포함하지만, 모두가 이 에디터 내에서 작업 할 수 있습니다.

정보가 너무 많아요!

많은 정보들을 당신이 한번에 이해하긴 어려울 겁니다. 하지만 이 튜토리얼의 핵심은 씬이 프로젝트에서 씬과 인스턴스가 어떻게 이용되는지를 알면 되는 것입니다.

여기에서 다룬 모든 내용은 게임을 처음 만들게 되면서 자연스럽게 익히게 될 것입니다. 지금은, 너무 걱정하지 마시고, 다음 튜토리얼로 넘어갑시다!