인스턴스화(Instancing) 하기

소개

하나의 씬을 만들고 노드를 추가하는 것은 작은 프로젝트에는 적합할지도 모릅니다. 하지만 프로젝트의 규모가 커지고 복잡해지면서, 수많은 노드들은 곧바로 다루기 어려워집니다. 이를 해결하기 위해 Godot에서는 프로젝트를 여러 개의 씬으로 나눌 수 있습니다. 이것으로 게임의 서로 다른 구성 요소를 조직하는데 큰 도움이 될 수 있습니다.

씬과 노드(Scenes and nodes)에서 말하길, 씬은 노드들이 트리 구조로 조직된 묶음이고, 하나의 노드가 트리의 루트가 된다고 했습니다.

../../_images/tree.png

많은 씬을 원하는 만큼 만들어서 디스크에 저장할 수 있습니다. 씬은 "압축된 씬(Packed Scenes)"이라고 불리는 방식으로 저장되고, 파일 확장자는 .tscn입니다.

../../_images/instancingpre.png

일단 씬 하나를 저장한다면, 다른 씬으로 인스턴스화할 수 있습니다. 다른 노드들처럼 말이죠.

../../_images/instancing.png

위 그림에서 씬 B는 씬 A에 인스턴스로 추가되었습니다.

예제를 통해 인스턴스화하기

어떻게 인스턴스화가 작동하는지 배우기 위해, 먼저 샘플 프로젝트를 다운로드합시다: instancing.zip.

원하는 위치에 압축을 푸세요. 그런 다음 Godot를 켜고, 프로젝트 매니저에서 '불러오기(Import)' 버튼으로 이 프로젝트를 추가하세요:

../../_images/instancing_import.png

압축을 푼 폴더를 검색하고 그 안에서 찾은 "project.godot" 파일을 여세요. 그러면 새 프로젝트가 프로젝트 목록에 나타납니다. '편집하기(Edit)' 버튼을 눌러 프로젝트를 편집하세요.

이 프로젝트에는 두 개의 씬이 있습니다: "Ball.tscn"과 "Main.tscn"입니다. Ball 씬에는 물리적인 동작을 주는 RigidBody2D를 사용했고, Main 씬에는 (StaticBody2D를 사용해서) 공과 충돌하는 장애물 세트가 있습니다.

../../_images/instancing_ballscene.png ../../_images/instancing_mainscene.png

Main 씬을 열고 루트 노드를 선택하세요:

../../_images/instancing_mainroot.png

We want to add an instance of the Ball scene as a child of Main. Click the "link"-shaped button (its hover-text says "Instance a scene file as a Node.") and select the Ball.tscn file.

../../_images/instancing_linkbutton.png

Ball은 화면 영역의 왼쪽 위에 있습니다 (그 곳이 화면 좌표에서 (0, 0)인 곳입니다). 공을 클릭하고 화면 가운데의 조금 위로 드래그하세요:

../../_images/instancing_placeball.png

"실행(Play)" 버튼을 눌러서 공이 화면 아래로 떨어지는지 확인하세요:

../../_images/instancing_playbutton.png

여러 인스턴스

씬에 원하는 만큼 많은 인스턴스를 추가할 수 있습니다. 다시 "인스턴스(Instance)" 버튼을 누르거나, 공 인스턴스를 클릭하고 Ctrl + D (macOS는 Cmd + D)를 누르면 복제됩니다:

../../_images/instancing_multiball.png

씬을 다시 실행하면 모든 공이 떨어질 것입니다.

../../_images/instancing_multiball.gif

인스턴스 편집하기

Ball 씬을 열고, PhysicsMaterial 옆의 ㅁPhysics를 클릭해 확장한 다음 Bounce 속성을 ``1``로 설정합니다.

../../_images/instancing_physicsmat2.png

"실행(Play)"을 누르면 모든 인스턴스화된 공이 이제 더 많이 튕기는 것을 볼 수 있습니다. 인스턴스화된 공은 저장한 씬 기반이기 때문에 씬의 변경사항도 인스턴스에 영향을 줍니다.

개별 인스턴스를 조정할 수도 있습니다. 바운스 값을 다시 0으로 설정한 다음 Main 장면에서 인스턴스화된 공 중 하나를 선택합니다. PhysicsMaterial과 같은 리소스는 기본적으로 인스턴스 간에 공유되므로 고유하게 만들어야 합니다. 인스펙터(Inspector) 독의 오른쪽 상단에 있는 도구 버튼을 클릭하고 "하위 리소스를 고유하게 만들기(Make Sub-Resources Unique)"를 선택합니다. 이 인스턴스의 Bounce속성을 ``1``로 설정하고 "재생"을 누릅니다.

../../_images/instancing_property.png

조정한 속성 옆에 회색 "되돌리기(Revert)" 버튼이 나타났습니다. 이 버튼이 있다는 것은 당신이 저장된 씬의 값을 덮어씌우기 위해 인스턴스화된 씬의 속성을 수정했다는 것을 의미합니다. 원본 씬에서 속성을 수정하더라도 사용자 지정 값은 유지됩니다. 되돌리기 버튼을 누르면 저장된 씬의 값으로 속성을 복원할 수 있습니다.

결론

인스턴스화하는 것은 많은 양의 오브젝트 사본을 만들 때 유용합니다. GDScript로도 인스턴스를 만들 수 있습니다. 인스턴스화하기 (이어서)를 참고하세요.