씬과 노드(Scenes and nodes)

소개

../../_images/chef.png

한번 당신이 더이상 게임 개발자가 아니라고 상상해보세요. 이제, 당신은 셰프입니다! 힙스터 복장을 벗어 던지고 토크와 더블 브레스트 재킷을 입는다고 말이죠. 이제 게임을 만드는 대신, 손님을 위한 새롭고 맛있는 레시피를 만들어 봅시다.

그럼, 어떻게 셰프가 레시피를 만들까요? 레시피는 두 가지 과정으로 나뉩니다: 첫째는 재료이고 둘째는 요리하는 방법입니다. 이렇게 한다면, 누구나 레시피에 따라서 훌륭한 음식을 맛 볼 수 있을 겁니다.

Godot에서 게임을 만드는 것도 꽤나 요리하는 느낌입니다. 주방에서 요리를 하듯이 엔진을 사용합니다. 주방으로 본다면, 노드는 요리를 하기 위한 신선한 재료들이 가득 찬 냉장고로 볼 수 있습니다.

많은 타입의 노드들이 있습니다. 어떤거는 이미지를 보여주고, 아니면 소리를 재생하거나 혹은 3D 모델을 보여주는 것이 있습니다. 그것도 수십 개나 있습니다.

노드(Nodes)

일단 기초로 한번 시작해봅시다. 노드는 게임을 만들기 위한 기본 건축 벽돌들 입니다. 위에서 언급했듯이, 노드는 다양한 특수 기능을 실행할 수 있습니다. 하지만, 주어진 노드들은 항상 이러한 성질들을 가집니다:

  • 이름이 있습니다.
  • 편집할 수 있는 속성들을 갖고 있습니다.
  • 모든 프레임을 처리하기 위한 콜백을 수신할 수 있습니다.
  • (더 많은 기능을 위해) 확장될 수 있습니다.
  • 다른 노드에 자식으로 추가될 수 있습니다.
../../_images/tree.png

마지막이 중요합니다. 노드는 다른 노드를 자식으로 가질 수 있습니다. 이런 식으로 배열된다면, 노드들은 트리 형태가 됩니다.

Godot에서, 이런 방식으로 노드들을 배열하는 것은 프로젝트를 조직화하기에 강력한 도구를 만듭니다. 각각의 노드들이 다른 기능을 가지고 있기에, 그들을 묶는 것으로 훨씬 복잡한 기능을 만들 수 있습니다.

이해하지 못해도 걱정하지 마세요. 우리는 몇 가지 섹션에서 계속 이것에 대해 알아볼 것입니다. 여기서 기억할 점은 노드가 있다는 것과 그것이 서로 배열될 수 있는 점입니다.

씬(Scenes)

../../_images/scene_tree_example.png

이제 노드의 개념이 정리되었으니, 다음 이론은 씬이 무엇인가에 대해 설명해 보겠습니다.

씬은 계층적으로 (트리 형식으로) 조직된 노드 그룹으로 구성됩니다. 또한 씬은:

  • 항상 하나의 루트 노드를 가집니다.
  • 디스크에 저장하고 다시 불러올 수 있습니다.
  • 인스턴스(Instance) 할 수 있습니다 (더 자세한 점은 나중에).

게임을 실행한다는 것은 씬을 실행한다는 것입니다. 한 프로젝트는 여러 씬 들로 이루어지지만, 게임을 시작하면, 하나의 씬만 메인 씬으로 선택됩니다.

기본적으로 Godot 편집기는 씬 편집기 입니다. 2D와 3D 씬을 편집하기 위한 도구들과 사용자 인터페이스들이 많이 있지만, 편집기는 씬을 편집하는 것과 씬을 구성하는 노드들이란 개념을 기반으로 둡니다.

새 프로젝트 만들기

예제를 통해 이런 추상적인 개념들을 더 구체화 시켜봅시다. 튜토리얼의 오랜 전통에 따라, 우리는 "Hello World" 프로젝트를 시작할 겁니다. 이를 통해 편집기를 사용하는 법을 설명하겠습니다.

프로젝트 외부에서 Godot 실행 파일을 실행하면, 프로젝트 매니저가 뜹니다. 이걸로 개발자들은 프로젝트들을 관리할 수 있습니다.

../../_images/project_manager.png

새 프로젝트를 만드려면, "새 프로젝트" 버튼을 누르세요. 프로젝트를 만들 경로를 고르고 프로젝트 명을 "새 프로젝트" 로 지정하세요:

../../_images/create_new_project.png

편집기

"새 프로젝트"를 만들면, 프로젝트를 엽니다. 그러면 Godot 편집기가 켜질 것입니다:

../../_images/empty_editor.png

앞에서 말했듯이, Godot로 게임을 만드는 것은 주방에서 요리하는 느낌입니다, 그렇다면 한번 냉장고를 열고 프로젝트에 신선한 노드들을 추가해 봅시다. 실행을 누르면 "Hello World!"가 화면에 나오게 할 것입니다.

그러기 위해, "새 노드" 버튼을 누르세요 (더하기 아이콘처럼 생겼습니다):

../../_images/newnode_button.png

그러면 당신이 만들 수 있는 긴 노드 대화 상자가 나옵니다:

../../_images/node_classes.png

거기서, "Label" 노드를 먼저 선택하세요. 검색으로 더 빨리 찾을 수도 있습니다:

../../_images/node_search_label.png

그리고 마침내, Label을 생성합니다! 생성 버튼을 누르는 순간 많은 작업이 이루어집니다:

../../_images/editor_with_label.png

먼저, 씬이 2D 편집기로 바뀝니다 (Label은 2D 노드 타입이기 때문입니다), 그리고 Label이 선택 된 채로, 뷰포트의 왼쪽 위에 보입니다.

노드는 씬 트리 편집기에 나타납니다 (오른쪽 위 상자), 그리고 라벨 속성은 인스펙터에 나타납니다 (오른쪽 아래 상자).

다음 작업은 라벨 내의 "Text" 속성을 바꾸는 것입니다. "Hello, World!" 라고 입력합니다:

../../_images/hw.png

오케이, 씬을 실행할 준비를 마쳤습니다! 위 버튼들 중 씬 실행 버튼을 눌르세요 (단축키로 F6을 누르세요):

../../_images/playscene.png

그리고오... 이런.

../../_images/neversaved.png

씬은 실행하려면 저장을 해야 합니다, 따라서 씬 -> 씬 저장에서 hello.tscn 같은 이름의 씬을 저장합니다:

../../_images/save_scene.png

그러면 재미난 일이 발생합니다. 파일 대화 상자는 특별하기 때문에, 프로젝트 안에만 저장할 수 있습니다. 프로젝트 경로는 "res://"로 "리소스 경로"를 의미합니다. 즉, 파일은 프로젝트 안에만 저장할 수 있다는 것입니다. 나중에 Godot에서 파일을 관리할 때 "res://"가 리소스 경로 임을 기억하세요, 그리고 이것으로 어떤 플랫폼이나 설치 경로와 관계없이 게임 내에서 리소스 파일을 찾을 수 있습니다.

씬을 저장하고 씬을 다시 실행하면, "Hello, World" 데모가 마침내 실행됩니다:

../../_images/helloworld.png

성공!

주석

If this doesn't immediately work and you have a hiDPI display on at least one of your monitors, go to Project → Project Settings → Display → Window then enable Allow Hidpi under Dpi.

프로젝트 구성하기

좋아요, 프로젝트를 구성할 때군요. 지금은 할 수 있는 일은 여기 있는 씬을 실행하는 것 밖에 없습니다. 하지만, 프로젝트는 여러 씬을 가질 수 있기 때문에, 하나를 메인 씬으로 지정해야 합니다. 언제나 프로젝트를 실행할 때 준비가 된 씬 말이죠.

이 설정들은 모두 project.godot 파일 내에 들어갑니다, 이것은 win.ini 형식으로 된 텍스트 문서입니다 (편집을 쉽게 하기 위한 겁니다). 당신이 프로젝트를 실행하는 방법을 바꿀 수 있는 많은 설정들이 이 파일 안에 있습니다. 프로젝트를 간단히 하기 위해, Godot는 project.godot 파일을 편집하기 위한 프로젝트 설정 대화 상자를 제공합니다.

대화 상자에 들어가기 위해, 프로젝트 -> 프로젝트 설정으로 가세요.

창을 열었다면, 메인 씬을 선택합니다. 'Application/Run/Main Scene' 속성으로 가서 'hello.tscn'을 선택합니다.

../../_images/main_scene.png

이제 변경했으니, 평범한 실행 버튼을 누를 때 (혹은F5를 누를 때), 어떤 씬을 편집하는 도중이더라도, 설정한 씬이 실행될 것입니다.

프로젝트 설정 대화 상자는 많은 설정을 제공하고 이것들을 project.godot 파일에 저장하거나 기본 값으로 되돌릴 수 있습니다. 값을 변경하게 되면, 이름 왼쪽에 체크 표시가 뜹니다. 이는 그 속성이 project.godot 파일에 저장되었다는 것입니다.

또한, ProjectSettings 싱글톤(singleton)을 사용해서 런타임에 쓰이는 사용자 구성 옵션을 추가할 수도 있습니다.

계속...

이 튜토리얼은 "씬과 노드"에 대해서만, 그러니까 단 하나의 씬과 하나의 노드만을 설명했습니다! 걱정하지 마세요, 다음 튜토리얼로 가서 개념을 확장시킬 겁니다...