1. 씬과 노드
노드는 화면 구성을 위한 빌딩 블럭이다. (예. Label, Camera, Viewport, Timer, Line2D).
씬은 게임 속 장면 하나를 의미하며 노드(들)로 만들어진 트리로 구성된다.

뭔가 어려워 보이니 직접 만들어보자. 부모 노드에 네개의 자식 노드를 만들어서 사분할 후 다른 색상으로 칠해보자.
일단, 2D 로 만들 예정이므로, 단축키 'F1' 을 눌러서 2D 씬 에디터 모드로 변경하자
1) 부모 노드 (ColorRect) 추가
좌상단 '+' 버튼을 클릭하거나 단축키 'Ctrl + A' 를 통해 ColorRect를 추가하고 이름을 "Background"로 변경하자

그리고 Anchor를 0, 0, 1, 1로 설정하여 화면을 꽉 채워보자.
Anchor에 대해 궁금하면 아래 링크를 참고하자.
https://drogrammer.tistory.com/21

2) 자식 노드 (ColorRect) 추가
- Background 노드를 선택한 상태에서, 다시 ColorRect 노드를 추가하고 이름을 Child1 로 변경하자.
- Child1 를 선택하고, 'Ctrl + D' 단축키를 세번 눌러서 총 네 개의 자식 노드를 만든다. (Child1 ~ Child4)

- 4분면에 빨강, 파랑, 녹색, 노랑색 사각형으로 자식노드가 배치되도록 속성을 변경한다.
| 노드 | Anchor | Color |
| Child1 | 0, 0, 0.5, 0.5 | Red |
| Child2 | 0, 0.5, 0.5, 1 | Blue |
| Child3 | 0.5, 0, 1, 0.5 | Green |
| Child4 | 0.5, 0.5, 1, 1 | Yellow |

3) 결과 및 저장
아래와 같이 네가지 색상으로 사분할 된 결과를 확인할 수 있다.

곧 설명할 인스턴스 및 상속 개념 설명을 위해, 'Ctrl + S' 버튼을 누르고 NestedColorRects.tscn 으로 씬을 저장한다.
2. 인스턴스
고도 엔진의 가장 큰 장점은 씬을 타입 (클래스) 처럼 사용할 수 있다는 점이다. (흐음...) 다시 말해서, 기존에 만들어둔 씬을 타입처럼 활용하여 인스턴스를 만들어 쓸 수 있다는 것이다. (흐으음....) 다시 더 쉽게 말해도 어려울 것 같으니 직접 만들어보자. 앞서 만든 NestedColorRects.tscn 네개로 화면을 다시 사분할 해보자.
1) 씬 생성 후 부모 노드 (ColorRect) 추가
메뉴 -> Scene -> New Scene 을 선택해서 씬을 새로 생성하고, 1-1) 에서 했던 것처럼 Background 를 추가한다.

2) 자식 노드 추가 (NestedColorRects 인스턴스)
- Background 노드 우클릭 후 "Instance Child Scene" 을 선택하고 NestedColorRect.tscn 을 선택한다.
- 그리고 그 이름을 Child1 으로 변경한다.

- Child1 를 선택하고, 'Ctrl + D' 단축키를 세번 눌러서 총 네개의 자식 노드를 만든다. (Child1 ~ Child4)
- 4분면에 자식노드가 배치되도록 Anchor 속성을 변경한다.
| 노드 | Anchor |
| Child1 | 0, 0, 0.5, 0.5 |
| Child2 | 0, 0.5, 0.5, 1 |
| Child3 | 0.5, 0, 1, 0.5 |
| Child4 | 0.5, 0.5, 1, 1 |

3) 조금만 더~
지금까지의 실습으로 막연하게 "다른 씬을 복사해 와서 사용할 수 있는 기능이구나!" 라고 생각하고 넘어가는 사람이 있을까봐, 조금만 더 설명하려고 한다.
실제로는 복사를 한것이 아니고, 다른 씬을 타입으로 사용해서 인스턴스를 만든 것이다.
만약 NestedColorRect.tscn 의 색상을 변경하면 어떤 일이 벌어질까?
- 단순 복사라면, 사용하는 씬에서는 변경이 없어야 한다. (X)
- 타입과 인스턴스 관계라면, 사용하는 씬도 함께 변경되어야 한다. (O)
테스트 해보자. NestedColorRect.tscn 씬의 우상단 (Child3) 의 색깔을 아래처럼 흰색으로 바꾸면,

NestedColorRect를 인스턴스화 하여 사용하는 씬에서도 색상이 변경된다.

3. 상속
1) 상속 씬 생성
메뉴 --> Scene --> New Inherited Scene 을 선택하고 앞서 만들어둔 NestedColorRects.tscn 을 열어보자.

결과적으로 NestedColorRects.tscn 을 상속받은 씬이 생성된다. 차이점은 아래와 같다
- 부모에서 정의된 노드는 삭제가 불가능하다.
- 하지만, 부모에서 정의된 노드의 속성은 변경 (오버라이딩) 가능하다.

2) 테스트 : 부모에서 상속 받은 노드 삭제 (안됨)
부모에서 정의되어 있는 Child3 노드를 우클릭해서 Delete Node(s) 를 선택하면 아래와 같이 삭제가 불가능 하다고 나온다.

3) 테스트 : 부모에서 상속 받은 노드 속성 변경 (됨)
Child1 의 Anchor 값을 0, 0, 0.25, 0.25로 변경하면 아래와 같이 반영 된다.

4) 테스트 : 부모 씬을 변경하면 자식 노드에 반영 (오버라이드 되지 않은 속성만 됨)
부모 씬 (NestedColorRects) 의 Child1 색상을 보라색으로 바꾸면,

자식 씬도 함께 바뀐다.

댓글