This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold 설계의 핵심에는 제대로 이해해야 하는 몇 가지 중요한 개념이 있습니다. 이 매뉴얼은 Defold의 빌딩 블록이 무엇으로 구성되는지 설명합니다. 이 매뉴얼을 읽은 뒤에는 주소 지정 매뉴얼과 메세지 전달 매뉴얼을 읽어 보세요. 또한 에디터 안에서 바로 이용할 수 있는 튜토리얼도 있어 빠르게 시작할 수 있습니다.

Defold 게임을 구성할 때 사용하는 기본 빌딩 블록은 세 가지입니다.
컬렉션은 게임 오브젝트와 다른 컬렉션을 담는 트리 구조입니다. 컬렉션은 항상 파일에 저장됩니다.
Defold 엔진이 시작되면 game.project 설정 파일에 지정된 단일 _부트스트랩(bootstrap) 컬렉션_을 로드합니다. 부트스트랩 컬렉션은 흔히 “main.collection”이라는 이름을 사용하지만, 원하는 이름을 자유롭게 사용할 수 있습니다.
컬렉션은 게임 오브젝트와 다른 컬렉션(서브-컬렉션 파일에 대한 참조)을 임의의 깊이로 중첩해서 포함할 수 있습니다. 다음은 “main.collection”이라는 예제 파일입니다. 여기에는 게임 오브젝트 하나(id는 “can”)와 서브-컬렉션 하나(id는 “bean”)가 들어 있습니다. 이 서브-컬렉션에는 다시 “bean”과 “shield”라는 두 게임 오브젝트가 들어 있습니다.

id가 “bean”인 서브-컬렉션은 “/main/bean.collection”이라는 자체 파일에 저장되어 있으며, “main.collection”에서는 참조만 한다는 점에 주의하세요.

“main”과 “bean” 컬렉션에 대응하는 런타임 오브젝트가 없으므로 컬렉션 자체를 주소로 지정할 수는 없습니다. 하지만 게임 오브젝트로 가는 _경로_의 일부로 컬렉션의 식별자를 사용해야 할 때가 있습니다. 자세한 내용은 주소 지정 매뉴얼을 참고하세요.
-- file: can.script
-- "bean" 컬렉션에 있는 "bean" 게임 오브젝트의 위치 가져오기
local pos = go.get_position("bean/bean")
컬렉션은 항상 컬렉션 파일에 대한 참조로 다른 컬렉션에 추가됩니다.
Outline 뷰에서 컬렉션을 마우스 오른쪽 클릭하고 Add Collection File을 선택합니다.
게임 오브젝트는 게임이 실행되는 동안 각각 별도의 수명을 가지는 단순한 오브젝트입니다. 게임 오브젝트에는 런타임에 조작하고 애니메이션할 수 있는 위치, 회전, 스케일이 있습니다.
-- "can" 게임 오브젝트의 X 위치 애니메이션
go.animate("can", "position.x", go.PLAYBACK_LOOP_PINGPONG, 100, go.EASING_LINEAR, 1.0)
게임 오브젝트는 비어 있는 상태로 사용할 수도 있지만(예: 위치 마커), 보통 스프라이트, 사운드, 스크립트, 모델, 팩토리 같은 다양한 컴포넌트를 장착합니다. 게임 오브젝트는 에디터에서 만들어 컬렉션 파일에 배치하거나, 팩토리 컴포넌트를 통해 런타임에 동적으로 스폰할 수 있습니다.
게임 오브젝트는 컬렉션 안에 내장(in-place)으로 추가하거나, 게임 오브젝트 파일에 대한 참조로 컬렉션에 추가합니다.
Outline 뷰에서 컬렉션을 마우스 오른쪽 클릭하고 Add Game Object(내장으로 추가) 또는 Add Game Object File(파일 참조로 추가)을 선택합니다.
컴포넌트는 게임 오브젝트에 특정 표현 및/또는 기능을 부여하는 데 사용됩니다. 컴포넌트는 게임 오브젝트 안에 포함되어야 하며, 해당 컴포넌트를 포함하는 게임 오브젝트의 위치, 회전, 스케일의 영향을 받습니다.

많은 컴포넌트에는 조작할 수 있는 타입별 프로퍼티가 있으며, 런타임에서 컴포넌트와 상호작용할 수 있는 컴포넌트 타입별 함수도 제공됩니다.
-- can "body" 스프라이트 비활성화
msg.post("can#body", "disable")
-- 1초 뒤에 "bean"에서 "hoohoo" 사운드 재생
sound.play("bean#hoohoo", { delay = 1, gain = 0.5 } )
컴포넌트는 게임 오브젝트 안에 내장(in-place)으로 추가하거나, 컴포넌트 파일에 대한 참조로 게임 오브젝트에 추가할 수 있습니다.
Outline 뷰에서 게임 오브젝트를 Right-click하고 Add Component(내장으로 추가) 또는 Add Component File(파일 참조로 추가)을 선택합니다.
대부분의 경우 컴포넌트를 내장으로 생성하는 것이 가장 적합하지만, 다음 컴포넌트 타입은 게임 오브젝트에 참조로 추가하기 전에 별도의 리소스 파일로 생성해야 합니다.
사용 가능한 모든 컴포넌트 타입 목록은 컴포넌트 개요를 참고하세요.
컬렉션, 게임 오브젝트, 컴포넌트 _파일_을 만들면 프로토타입(prototype)을 만드는 것입니다. 다른 엔진에서는 이를 “prefabs” 또는 “blueprints”라고도 부릅니다. 이 작업은 프로젝트 파일 구조에 파일만 추가하며, 실행 중인 게임에는 아무것도 추가하지 않습니다. 프로토타입 파일을 기반으로 컬렉션, 게임 오브젝트, 컴포넌트의 인스턴스를 추가하려면 컬렉션 파일 중 하나에 그 인스턴스를 추가해야 합니다.
오브젝트 인스턴스가 어떤 파일을 기반으로 하는지는 Outline 뷰에서 확인할 수 있습니다. “main.collection” 파일에는 파일을 기반으로 하는 세 인스턴스가 들어 있습니다.

프로토타입 파일을 만드는 장점은 게임 오브젝트나 컬렉션의 인스턴스가 여러 개 있고 이를 모두 변경하려 할 때 분명해집니다.

프로토타입 파일을 변경하면 그 파일을 사용하는 모든 인스턴스가 즉시 업데이트됩니다.

여기서는 프로토타입 파일의 스프라이트 이미지가 변경되었고, 해당 파일을 사용하는 모든 인스턴스가 즉시 업데이트되었습니다.

컬렉션 파일에서는 하나 이상의 게임 오브젝트가 단일 부모 게임 오브젝트의 자식이 되도록 게임 오브젝트의 계층구조를 만들 수 있습니다. 한 게임 오브젝트를 드래그해서 다른 게임 오브젝트 위에 드롭하기만 하면, 드래그한 게임 오브젝트가 대상의 자식이 됩니다.

오브젝트의 부모-자식 계층구조는 오브젝트가 변형에 반응하는 방식에 영향을 주는 동적 관계입니다. 오브젝트에 적용된 모든 변형(이동, 회전, 확대/축소)은 에디터와 런타임 모두에서 그 오브젝트의 자식에도 차례로 적용됩니다.

반대로 자식의 이동은 부모의 로컬 공간에서 이루어집니다. 에디터에서는 Edit ▸ World Space(기본값) 또는 Edit ▸ Local Space를 선택해 자식 게임 오브젝트를 로컬 공간이나 월드 공간에서 편집할 수 있습니다.
런타임에 오브젝트로 set_parent 메세지를 보내 오브젝트의 부모를 변경하는 것도 가능합니다.
local parent = go.get_id("bean")
msg.post("child_bean", "set_parent", { parent_id = parent })
게임 오브젝트가 부모-자식 계층구조의 일부가 되면 컬렉션 계층구조 안에서의 위치도 바뀐다고 오해하는 경우가 많습니다. 하지만 이 둘은 완전히 다른 개념입니다. 부모-자식 계층구조는 씬 그래프(scene graph)를 동적으로 변경하여 오브젝트가 서로 시각적으로 연결될 수 있게 합니다. 게임 오브젝트의 주소를 결정하는 유일한 것은 컬렉션 계층구조 안에서의 위치입니다. 이 주소는 오브젝트의 수명 동안 정적으로 유지됩니다.