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

인스턴스 편집하기

Open the Ball scene and add a PhysicsMaterial by clicking on the down arrow and selecting "New PhysicsMaterial".

../../_images/instancing_physicsmat1.png

Then, expand the material by clicking on it, and set the Bounce property to 1.

../../_images/instancing_physicsmat2.png

Press "Play" and notice that all of the instanced balls are now much more bouncy. Because the instanced balls are based on the saved scene, changes to that scene will affect all instances.

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

../../_images/instancing_property.png

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

결론

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