인스턴스(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

여러 인스턴스

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

../../_images/instancing_multiball.png

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

../../_images/instancing_multiball.gif

인스턴스 편집하기

Ball 씬을 열고 아래 화살표를 클릭하고 "새 PhysicsMaterial"을 선택해서 PhysicsMaterial을 추가하세요.

../../_images/instancing_physicsmat1.png

그 후 PhysicsMaterial을 클릭해서 펼친 후, Bounce 속성을 1로 설정합니다.

../../_images/instancing_physicsmat2.png

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

개개의 인스턴스도 조절할 수 있습니다. Bounce 값을 0으로 돌려 놓고 Main 씬으로 돌아간 뒤, 인스턴스된 Ball 하나를 선택하세요. PhysicsMaterial과 같은 리소스도 기본적으로 인스턴스끼리 공유합니다. 따라서 먼저 이 Ball의 리소스를 유일하게 만들어야 합니다. 아래 화살표를 클릭하고 "유일하게 만들기(Make Unique)"를 선택하세요. Bounce 값을 1로 설정하고 "실행하기(Play)"를 누르세요.

../../_images/instancing_property.png

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

결론

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