본문 바로가기

게임/Godot 엔진

GODOT - Scene & Node

  • 본 내용은 godot 공식 문서를 공부하면서 정리한 것입니다.

https://docs.godotengine.org/ko/stable/getting_started/step_by_step/scenes_and_nodes.html#doc-scenes-and-nodes

GOTDOT 엔진은 다양한 Node 들을 사용해 게임을 만들 수 있다.

Node 란?

Godot 엔진 공식 사이트를 가보면, 게임을 만들기 위한 '재료' 라고 소개하고 있다.

Gotdot 엔진이 주방이라면 Node 는 요리 재료다!

이미지 보여주는 노드, 소리를 재생하는 노드, 3D 모델을 보여주는 노드 등 아주 다양하게 있다.

Node 의 특징

  • 이름이 있다.
  • 편집할 수 있는 속성을 가지고 있다.
  • 각 프레임을 처리하기 위한 콜백을 받을 수 있다.
  • 더 많은 기능을 가질 수 있도록 확장 할 수 있다.
  • 다른 노드의 자식으로 추가 될 수 있다.

마지막 특징으로 인해 노드들은 Tree 구조를 가지게 된다.
노드들을 잘 묶으면 복잡한 기능을 구현 할 수 있다!

Scene ?

Scene 은 트리 구조로 조직된 노드 그룹으로 구성된다.

Scene 의 특징

  • 항상 하나의 루트 노드를 가진다.
  • 디스크에 저장하고 다시 불러 올 수 있다.
  • Instance (인스턴스) 가 될 수 있다.
  • 씬은 Packed Scenes 라 불리는 방식으로 저장되고, .tscn 파일 확장자로 저장된다.

Godot 에서 게임을 실행한 다는 것은 씬을 실행하는 것이다.
한 프로젝트는 여러 씬으로 이루어지고, 게임을 시작하면 그 중 하나의 씬만 메인씬으로 선택된다.

Godot 의 편집기와 씬

기본적으로 Godot 의 편집기는 씬 편집기 이다.
편집기는

  1. 씬을 편집하는 것
  2. 씬을 구성하는 노드들
    이라는 개념으로 있다.

Instance 하기

Scene 의 특징 중 하나가 Instance 하기인데, Instance 하기란 무엇일까?

씬 하나를 저장하면, Node 들 처럼 다른 씬에 붙일 수 (?) 있는데, 이를 다른 씬으로 Instance 한다고 한다.

위 그림에서는 씬 B 가 씬 A 에 인턴스로 추가 된 것이다.

Instance 하는 것은 많은 양의 객체 사본을 만들때 유용하다.

Instance 해서 무엇을?

  • Scene 을 하위 객체로 나누어서 관리하기 쉽게 한다.
  • 한번에 여러 노드 인스턴스를 관리하고 편집할 수 있는 도구이다.
  • 복잡한 게임 흐름, 심지어 UI 도 묶고 조직할 수 있게 해준다. (Godot 에서는 UI 도 노드다!)

Godot 의 디자인 언어

그리고 Godot에서 말하는 씬을 인스턴스하는 것의 가장 강력한 점은 인스턴스가 디자인 언어 로 작동한다는 점이라고 한다.
(이게 무슨 소리일까)
Godot 은 이런 컨셉으로 설계되었다고 한다...

Godot 으로 게임을 만들때는 MVC 같은 일반적인 디자인 패턴을 버리고,
씬을 더 자연스럽게 바라보기를 권장한다! (오!)

Godot 에서 추천하는 게임 제작 과정

  1. 게임에서 보이는 요소를 상상하는 것으로 시작하자. (프로그래머의 관점이 아닌 요소)
  2. 게임에서 시각화 할 수 있는 부분을 쭉 적어보고, 각 구성 요소 간 소유권을 나타내기 위한 화살표를 추가해 본다.
  3. 다이어그램에서 각 요소로 이뤄진 씬을 만들자.
  4. 인스턴스를 사용해서 소유권 관계를 만들자

위와 같이 씬을 기반으로 설계하면 게임의 논리 자체에 집중하게 되어, 개발을 더 빠르고 직관적으로 만든다고
Godot 은 말하고 있다.

 

예를 들어 슈팅게임은 다음과 같은 다이어그램을 가진다.

더 복잡한 오픈월드 게임은 다음과 같이 된다.

 

'게임 > Godot 엔진' 카테고리의 다른 글

Godot 노드들  (0) 2021.11.07
Godot 편집기 Tip  (0) 2021.11.07
Gotdot - Tutorial 게임 만들기 (1)  (0) 2021.03.03
Godot - Physics  (0) 2021.03.03
Godot - Scripting  (0) 2021.02.06