인스턴스(Instance)하기

소개

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

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

../../_images/tree.png

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

../../_images/instancingpre.png

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

../../_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

Ball 씬의 인스턴스를 Main 씬의 자식으로 추가할 것입니다. "사슬" 모양 버튼을 클릭하세요 (마우스를 올리면 "씬 파일을 노드로 인스턴스해요."라고 뜹니다), 그리고 Ball.tscn 파일을 선택하세요.

../../_images/instancing_linkbutton.png

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

../../_images/instancing_placeball.png

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

../../_images/instancing_playbutton.png

여러 인스턴스

You can add as many instances as you like to a scene, either by using the "Instance" button again, or by clicking on the ball instance and pressing Ctrl + D (Cmd + D on macOS) to duplicate it:

../../_images/instancing_multiball.png

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

../../_images/instancing_multiball.gif

인스턴스 편집하기

Open the Ball scene, expand the PhysicsMaterial by clicking on it, and set the Bounce property to 1.

../../_images/instancing_physicsmat2.png

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

You can also adjust individual instances. Set the bounce value back to 0 and then in the Main scene, select one of the instanced balls. Resources like PhysicsMaterial are shared between instances by default, so we need to make it unique. Click on the tools button in the top-right of the Inspector dock and select "Make Sub-Resources Unique". Set its Bounce to 1 and press "Play".

../../_images/instancing_property.png

조정한 속성 옆에 회색 "되돌리기(Revert)" 버튼이 나타났습니다. 이 버튼이 있다는 것은 인스턴스된 씬의 속성을 수정하여 저장된 씬에서 값을 다시 정의한 것을 의미합니다. 기존 씬에서 속성을 수정하더라도 맞춤 값은 유지됩니다. 되돌리기 버튼을 누르면 저장된 씬의 값으로 속성을 복원할 수 있습니다.

결론

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