인스턴스(Instance)

소개

하나의 씬에 노드를 넣는 걸로도 작은 프로젝트 정도는 작업할 수 있을 겁니다, 하지만 프로젝트의 규모가 커지고 복잡하게 되면, 수많은 노드들을 다루기 어렵게 됩니다. 이를 해결하기 위해, Godot는 프로젝트를 여러 개의 씬으로 나눌 수 있게 합니다. 이것은 당신이 게임 내의 다른 구성 요소들을 결합할 수 있도록 하는 강력한 도구입니다.

씬과 노드(Scenes and nodes)에서 씬은 노드들이 트리 형태로 결합된 모임이고, 하나의 노드가 트리 루트라고 배웠습니다.

../../_images/tree.png

당신은 원하는 만큼 많은 씬들을 만들 수 있습니다. 씬들은 "압축된 씬(Packed Scenes)"이라 불리는 방법으로 저장되며 .tscn 파일 확장자 명을 갖습니다.

../../_images/instancingpre.png

하나의 씬이 저장되면, 다른 노드인 것처럼 다른 씬으로 인스턴스 될 수 있습니다.

../../_images/instancing.png

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

예제를 통해 인스턴스하기

어떻게 인스턴스가 이루어지는지 배우기 위해, 샘플 프로젝트를 다운로드 합니다: instancing.zip.

원하는 위치에 이 프로젝트를 풀으세요. 그리고 Godot를 키고 프로젝트 매니저에서 '가져오기' 버튼을 눌러 이 프로젝트를 추가하세요:

../../_images/instancing_import.png

당신이 추출한 폴더를 검색하고 그 안에 있는 "project.godot" 파일을 여세요. 그러면, 새 프로젝트가 프로젝트 목록에 뜰 것입니다. '편집' 버튼을 눌러 프로젝트를 편집하세요.

이 프로젝트는 두 개의 씬을 갖고 있습니다: "Ball.tscn" 과 "Main.tscn" 이죠. 공 씬은 물리 행동을 주기 위해 RigidBody2D 를 사용하고 메인 씬은 StaticBody2D 를 사용해서 공과 충돌하는 장애물들이 있습니다.

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

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

../../_images/instancing_mainroot.png

우리는 Ball 씬을 Main 씬의 자식으로 인스턴스하여 추가할 겁니다. "사슬" 모양 버튼을 누르세요 (커서를 올리면 "씬 파일을 노드로 추가합니다." 라고 뜹니다.) 그리고 Ball.tscn 파일을 선택하세요.

../../_images/instancing_linkbutton.png

공은 화면 영역의 왼쪽 위에 자리 잡을 것입니다 (거기가 화면 좌표에서 (0, 0)인 부분입니다). 공을 클릭하고 가운데 쯤에 드래그하세요:

../../_images/instancing_placeball.png

"재생" 버튼을 눌러 공이 화면의 아래로 떨어지는지 확인하세요:

../../_images/instancing_playbutton.png

많은 인스턴스

당신은 씬에 원하는 만큼 많은 인스턴스를 추가할 수 있습니다, 다시 "인스턴스" 버튼을 누르거나, 공 인스턴스를 클릭하고 "복사" (Ctrl-D)를 눌러서 말이죠:

../../_images/instancing_multiball.png

씬을 다시 실행시키면 모든 공들이 떨어질 겁니다.

../../_images/instancing_multiball.gif

인스턴스 편집하기

Ball 씬을 열고 아래 화살표를 클릭하고 "새 PhysicsMaterial"을 선택하여 PhysicsMaterial을 추가합니다.

../../_images/instancing_physicsmat1.png

그 후, 머티리얼을 클릭하여 확장한 뒤에, Bounce 속성을 1로 설정합니다.

../../_images/instancing_physicsmat2.png

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

각각의 인스턴스들도 조절할 수 있습니다. Bounce 값을 0으로 돌려 놓고 Main 씬으로 돌아간 다음, 인스턴스된 공 하나를 선택합니다. 공의 Bounce 값을 1로 맞추고 "재생"을 누르세요.

../../_images/instancing_property.png

조절된 속성 옆에 회색 "새로고침" 버튼이 나타났습니다. 이 버튼이 있다는 것은, 인스턴스된 씬의 속성을 수정하여 저장된 씬의 값을 재정의한 것입니다. 속성이 기존의 씬에서 수정되더라도, 커스텀 값은 유지됩니다. 새로고침 버튼을 누르면 저장된 씬의 값으로 속성을 복원시킬 수 있습니다.

결론

인스턴스는 많은 양의 오브젝트 복사본을 만들 때 유용합니다. GDScript를 사용해서도 인스턴스를 만들 수 있습니다, 인스턴스(계속)를 참고하세요.