> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-ko/sdk7/getting-started/sdk-101.md).

# SDK 빠른 시작

공식 SDK Skills를 사용한 AI 지원 바이브 코딩과 Creator Hub, SDK로 첫 Decentraland 씬을 만드세요.

이 튜토리얼에서는 Creator Hub의 시각적 Scene Editor, Decentraland SDK를 사용해 직접 작성하는 코드, AI 지원 **바이브 코딩**을(를) 함께 활용하여 첫 번째 씬을 만드는 방법을 안내합니다. 세 가지를 모두 함께 사용하고, 각각이 언제 빛을 발하는지도 배우게 됩니다.

## Decentraland 씬은 어떻게 만들나요?

1. **설치하세요** [**크리에이터 허브**](https://decentraland.org/download/creator-hub)— 씬을 만들고, 미리보고, 게시할 수 있는 공식 데스크톱 앱입니다. 모든 숙련도 수준의 크리에이터에게 권장되는 도구입니다.
2. **AI 코딩 도우미를 사용하는 경우** (Claude Code, Cursor, Copilot 등), 공식 [Decentraland SDK Skills](/creator/content-creator-ko/sdk7/getting-started/vibe-coding.md) 를 설치하여 검증된 SDK7 패턴을 알 수 있도록 하세요: `npx skills add decentraland/sdk-skills`
3. **이** [**CLI**](/creator/content-creator-ko/sdk7/getting-started/using-the-cli.md) 는 고급 사용자와 자동화된 워크플로를 위한 대안입니다.

이 튜토리얼의 나머지 부분에서는 권장 경로를 단계별로 안내합니다.

## Creator Hub 설치하기

Creator Hub를 사용하면 Decentraland 씬을 빌드, 미리 보기 및 배포할 수 있습니다. Creator Hub 다운로드 [여기](https://decentraland.org/download/creator-hub).

씬의 코드를 편집하려면 코드 편집기도 필요합니다. [Visual Studio Code](https://code.visualstudio.com/) 과 [Cursor](https://www.cursor.com/) 둘 다 훌륭한 선택이지만, 어떤 코드 편집기를 사용해도 됩니다.

다음을 읽어보세요 [설치 가이드](/creator/content-creator-ko/scene-editor/get-started/editor-installation.md) 자세한 내용은.

## 첫 번째 씬 만들기

1. Creator Hub를 엽니다.
2. 다음을 선택합니다 **씬** 탭을 선택하고 클릭합니다 **새 씬**.

   ![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-8133cc3d42ad03fd97fbd66482f9825ff74c1227%2Fnew-scene.png?alt=media\&token=947b49c3-5401-4771-ba7f-3f69c17cb08d)
3. 시작 템플릿을 선택하세요. 이 실습에서는 다음을 선택하세요 **빈 씬**.

이 단계는 몇 분 정도 걸릴 수 있습니다. 기본 씬에 필요한 기본 파일 세트가 폴더에 채워집니다. 완료되면 씬의 빈 그리드가 표시됩니다.

## 에셋 팩에서 아이템 추가하기

다음을 살펴보세요 **에셋 팩** Scene Editor 하단 섹션에서 몇 가지 아이템을 씬으로 드래그하세요. 지금은 어떤 아이템이든 괜찮습니다.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-533d4553c3a38522cdd08dce8040a08c038699e7%2Fasset-packs.png?alt=media\&token=99210953-9718-4fa7-895c-317c45f74d6e)

이미 배치된 아이템은 클릭하여 드래그하면 위치를 변경할 수 있습니다. 다음을 참조하세요 [Scene editor essentials](/creator/content-creator-ko/scene-editor/get-started/scene-editor-essentials.md#position-items) 자세한 내용은.

{% hint style="info" %}
**💡 팁**: 씬 전체를 바닥 아이템으로 덮으세요. 유형이 다음인 아이템 **지면** 인 항목에는 페인트통 아이콘이 있습니다. 이를 씬으로 끌어오면 씬의 모든 지면이 이 항목의 복사본으로 덮입니다.

<img src="https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-8d952452b5bf6475868c3392c6f0472690587580%2Fground.png?alt=media&amp;token=4c0c854a-72d9-4dc8-853d-7ef652c50cc3" alt="Ground" data-size="original">
{% endhint %}

## 미리 보기 실행

다음 **실행** 상단 메뉴의 버튼을 눌러 Decentraland 내부에서 씬을 불러오세요. 이제 Decentraland 아바타로 씬을 탐색할 수 있습니다.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-39c019806cf83fa82b105ac12836311e3e7bae7c%2Frunning-preview.png?alt=media\&token=87161c9e-aa8b-4321-aa97-aad7f74fb1b0)

작업 중에도 미리 보기 창을 열어 둘 수 있습니다. 변경할 때마다 업데이트됩니다. 자세한 내용은 다음을 참조하세요 [씬 미리 보기](/creator/content-creator-ko/sdk7/getting-started/preview-scene.md).

## 사용자 지정 3D 에셋

다음에서 아보카도 3D 모델을 다운로드하세요 *glb* 형식으로, 다음 [링크](https://github.com/decentraland-scenes/avocado/raw/main/avocado-glb.zip) 에서 다운로드한 후 압축을 풉니다.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-8da7cae3effded9686a5efd6238653c527edc988%2Favocado-babylon.png?alt=media\&token=7911c7bb-d62b-498a-bd39-76e454a4a79d)

다음을 드래그하세요 **avocado.glb** 파일 탐색기에서 Scene Editor 하단 패널로 파일을 드래그합니다(다음이 있는 동일한 패널 **에셋 팩** 과 **로컬 에셋** 탭)에서 다음을 클릭합니다 **가져오기**.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-7c5cc9b92e593be1c3808b15abd54037818fa588%2Fimport-avocado.png?alt=media\&token=c3f1a7d4-57b3-4d76-8e28-5cbb295caddc)

이제 다음을 찾을 수 있습니다 **avocado.glb** 모델을 다음에서 **로컬 에셋** 탭의 다음 내부에서 **씬** 폴더. 에셋 팩의 다른 아이템처럼 파일을 씬으로 드래그하세요.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-01ea843bc76e6f15b8e99d50391936d8b0344a93%2Favocado-in-local-assets.png?alt=media\&token=29088f7c-8546-4858-99aa-b2aaf431a158)

## 씬 코드 편집하기

다음 **<> 코드** 상단 메뉴의 버튼을 눌러 코드 편집기에서 씬 프로젝트를 엽니다.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-5837e60ee5b65bd46815c97282d53b1a44a70665%2Fcode-button.png?alt=media\&token=bb2a8cec-e8bd-485a-bbe1-f402ceb2aebd)

{% hint style="warning" %}
**📔 참고**: 아무것도 열리지 않으면 다음과 같은 코드 편집기가 있는지 확인하세요 [Visual Studio Code](https://code.visualstudio.com/) 또는 [Cursor](https://www.cursor.com/) 설치되어 있습니다.
{% endhint %}

코드 편집기 왼쪽 여백에서 프로젝트의 파일 및 폴더 구조를 탐색할 수 있습니다. 다음을 엽니다 `index.ts` 파일을 다음 내부에서 `src` 폴더. 내용은 다음과 같아야 합니다:

```ts
import {} from '@dcl/sdk/math'
import { engine } from '@dcl/sdk/ecs'

export function main() {}
```

Decentraland 씬은 다음으로 작성됩니다 [TypeScript](https://www.typescriptlang.org/), Decentraland SDK를 사용합니다. 이는 3D 콘텐츠 배치, 상호작용 추가 및 씬에서 일어나는 일을 제어하는 데 필요한 모든 것을 갖춘 라이브러리입니다.

이 파일은 다음이라는 함수를 정의합니다 `main()`, 이는 씬의 진입점입니다. 여기에 넣은 모든 코드는 씬이 처음 로드될 때 실행됩니다.

이미 아보카도 하나를 시각적으로 씬에 드래그했습니다. 이제 두 번째 아보카도를 추가해 봅시다. 이번에는 코드를 작성해서 추가합니다. 다음 파일의 전체 내용을 `index.ts` 파일을 다음 내용으로 바꾸세요:

```ts
import { Vector3 } from '@dcl/sdk/math'
import { engine, Transform, GltfContainer } from '@dcl/sdk/ecs'

export function main() {
	// 새 Entity 생성
	let avocado2 = engine.addEntity()

	// Transform 부여
	Transform.create(avocado2, {
		position: Vector3.create(8, 0, 8),
	})

	// GLTF 부여
	GltfContainer.create(avocado2, {
		src: 'assets/scene/avocado.glb',
	})
}
```

이 줄들은 새 [엔티티](/creator/content-creator-ko/sdk7/architecture/entities-components.md)을(를) 생성하고, 여기에 [형상](/creator/content-creator-ko/sdk7/3d/shape-components.md) 다운로드한 3D 모델을 기반으로 [위치를 설정합니다](/creator/content-creator-ko/sdk7/3d/entity-positioning.md) 다음을 통해 **Transform** 컴포넌트를 추가해야 합니다.

일반적으로 다음에 작성하는 코드는 `index.ts` 모두 다음 내부에 있어야 합니다 `main()` (또는 main에서 간접적으로 참조되는 다른 함수 안에). 다음을 참조하세요 [장면 수명 주기](/creator/content-creator-ko/sdk7/getting-started/coding-scenes.md#scene-lifecycle) 자세한 내용은.

씬 미리 보기를 실행하세요. 이제 Scene Editor에서 추가한 아보카도와 코드로 추가한 아보카도, 두 개가 보일 것입니다.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-10e98ca0228fa04e0cd9afde8c457b8fb7932d19%2Favocados.png?alt=media\&token=b5ebd04c-f445-4d31-beca-7f2318c17f0e)

{% hint style="warning" %}
**📔 참고**: 두 번째 아보카도는 **코드에만**존재합니다. 씬을 실행하면 나타나지만, Scene Editor 캔버스와 엔터티 트리에는 다음에서 생성된 엔터티를 표시할 수 없습니다 `index.ts`. 편집기에서 보이지 않아도 걱정하지 마세요. 시각적 편집과 코드를 함께 사용할 때 기억해야 할 핵심 사항입니다.
{% endhint %}

두 아보카도는 같은 구성 요소로 만들어집니다. 다음을 선택하세요 **첫 번째** Scene Editor의 아보카도: 속성 패널에는 **Transform** 와 하나의 **GltfContainer** 컴포넌트가 표시되며, 여기에는 방금 코드로 작성한 것과 같은 종류의 필드가 있습니다. 이는 동일한 대상을 보는 두 가지 방식입니다.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-6ce41a7d98cb2b5c59c9bf2b870ea05d34a73f62%2Favocado-components.png?alt=media\&token=b3bd0992-43a5-46c4-99ba-da79cdc7909f)

## Script로 상호작용 추가하기

아보카도가 플레이어에게 반응하도록 만들어 봅시다. 이미 편집 중이던 `index.ts` 에 코드를 추가해서 할 수도 있지만, 대신 다음을 사용하겠습니다 **Script 컴포넌트**: Scene Editor에서 아이템에 직접 코드를 연결하는 방법입니다. 각 아이템의 동작을 독립적으로 유지하며, 같은 스크립트를 여러 아이템에서 재사용할 수도 있습니다.

1. Scene Editor에서 첫 번째 아보카도(드래그하여 넣은 것)를 선택하세요. 기억하세요. 코드 전용 아보카도는 여기에서 보이지 않습니다.
2. 다음 **+** 속성 패널 상단의 버튼을 누르고 다음을 선택합니다 **Script** 하여 Script 컴포넌트를 추가합니다.
3. 클릭 **+ 새 스크립트 만들기** 을 클릭하고 이름을 다음으로 지정하세요 `AvocadoScript`.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-678dd3ca7b526cd9effbf8249e517c5764bff7a2%2Favocado-script.png?alt=media\&token=80e7bf33-90c9-49df-91b7-37f7f6e47fb1)

4. 다음 **<> 코드** Script 컴포넌트의 버튼을 눌러 코드 편집기에서 새 파일을 엽니다.

스크립트는 세 가지 주요 부분으로 이루어진 클래스입니다(간결성을 위해 주석은 생략됨):

```ts
import { engine, Entity } from '@dcl/sdk/ecs'
import {} from '@dcl/sdk/math'

export class AvocadoScript {
	constructor(
		public src: string, // 제거하지 마세요
		public entity: Entity, // 제거하지 마세요
		// 아래에 사용자 지정 입력을 추가하세요
	) {}

	start() {
		// 씬이 로드될 때 한 번 호출됨
	}

	update(dt: number) {
		// 매 프레임마다 호출됨
	}
}
```

* 이 **constructor** 는 Creator Hub의 Script 컴포넌트에서 편집 가능한 필드로 표시되는 매개변수를 정의합니다. 제거하지 마세요 `src` 또는 `엔티티`.
* **`start()`** 는 실행됩니다 **한 번**, 씬이 로드될 때입니다. 컴포넌트 생성, 클릭 핸들러 등록 등의 초기 설정에 사용하세요.
* **`update(dt)`** 는 다음에서 실행됩니다 **매 프레임** 게임에서 초당 약 30회 실행됩니다. 이동과 같은 연속적인 동작에 사용하세요. `dt` 는 마지막 프레임 이후 몇 초가 지났는지 알려줍니다.

클래스 내부에서, `this.entity` 는 항상 Script 컴포넌트를 보유한 엔터티, 이 경우 아보카도를 가리킵니다. 이것이 스크립트를 재사용할 수 있게 하는 이유입니다. 같은 스크립트를 10개의 아이템에 연결하면 각각 자기 자신에게 동작합니다.

### 첫 번째 상호작용 바이브 코딩하기

다음 코드를 직접 작성할 수도 있지만, 지금은 다음을 시도하기 좋은 순간입니다 **바이브 코딩**: 원하는 것을 AI 어시스턴트에게 설명하고 코드 작성을 맡기는 것입니다. 대부분의 코드 편집기에는 Cursor의 채팅, VS Code의 GitHub Copilot 또는 [Claude Code](https://claude.com/product/claude-code)와 같은 기능이 내장되어 있습니다. Claude Desktop이나 명령줄의 Claude Code처럼 코드 편집기 밖에서 프롬프트를 작성할 수도 있습니다.

첫 프롬프트 전에 Decentraland SDK 스킬을 설치하세요. 그러면 AI가 SDK 패턴을 알고 실수를 훨씬 줄일 수 있습니다:

```bash
npx skills add decentraland/sdk-skills
```

이 스킬은 AI가 SDK로 어떤 작업을 수행하는 방법을 확신하지 못할 때마다 참조하는 문서입니다. 따라서 추측하는 대신 올바른 코드를 작성합니다. 다음을 참조하세요 [AI와 함께하는 바이브 코딩](/creator/content-creator-ko/sdk7/getting-started/vibe-coding.md) 설정 옵션 및 프롬프트 팁을 확인하세요.

이제 다음과 같은 프롬프트를 시도해 보세요:

> AvocadoScript.ts에서 플레이어가 아보카도를 클릭하면 콘솔에 메시지를 기록하도록 만드세요.

다음과 같은 결과가 나와야 합니다(또는 직접 붙여 넣으세요):

```ts
import { engine, Entity, pointerEventsSystem, InputAction } from '@dcl/sdk/ecs'
import {} from '@dcl/sdk/math'

export class AvocadoScript {
	constructor(
		public src: string,
		public entity: Entity,
	) {}

	start() {
		pointerEventsSystem.onPointerDown(
			{
				entity: this.entity,
				opts: { button: InputAction.IA_POINTER },
			},
			() => {
				console.log('CLICKED AVOCADO')
			}
		)
	}

	update(dt: number) {}
}
```

다음 내부에 클릭 동작을 추가했습니다 `start()` 함수입니다. 클릭 동작은 한 번만 정의하면 되며, 플레이어가 아이템을 클릭할 때마다 반응합니다. 다음 `pointerEventsSystem.onPointerDown()` 문은 세 가지를 정의합니다:

* 무엇에 `엔티티` 클릭 이벤트가 작동하는지: 여기서는 `this.entity`, 스크립트를 보유한 아보카도입니다.
* 하나의 `opts` 객체: 사용할 버튼과 현재 사용하지 않는 기타 선택적 인수입니다.
* 엔터티가 클릭될 때마다 실행되는 함수입니다.

기록된 메시지를 보려면 미리 보기를 실행하고 다음을 클릭해 콘솔을 여세요 ![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-a673f6b987216e9e471fdac882879c44fcf94652%2Fconsole-icon.png?alt=media\&token=1965a51b-d4b0-4caa-b9d5-d24d738c1fb8) 오른쪽 상단 모서리의 아이콘입니다. 다음 키를 눌러 토글할 수도 있습니다 **\`** 키. 아보카도를 클릭할 때마다 새 줄이 표시됩니다:

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-da59e95c8a6642350fcf0c49e7e589609ef68eec%2Flogs-avocado.png?alt=media\&token=b5ec07c9-ca23-4724-b443-4271686f0119)

{% hint style="warning" %}
**📔 참고**: 엔터티를 클릭 가능하게 하려면 콜라이더 지오메트리가 있어야 합니다. 여기에서 사용한 모델에는 이미 하나가 포함되어 있습니다. 다음을 참조하세요 [콜라이더](https://github.com/decentraland/docs/tree/main/creator/sdk7/3d-modeling/colliders.md) 없는 모델을 위한 해결 방법을 확인하세요.
{% endhint %}

### 아보카도 사라지게 하기

이제 클릭으로 더 흥미로운 일을 하게 만들어 봅시다! AI 어시스턴트에게 다음과 같이 요청하세요:

> 아보카도를 클릭하면 사라지게 해 주세요. 줄어들면서 튀는 애니메이션으로 사라지길 원합니다. 또한 아보카도를 가리킬 때 보이는 힌트는 "Collect"라고 표시되게 해 주세요.

다음과 같은 결과가 나와야 합니다:

```ts
import { engine, Entity, pointerEventsSystem, InputAction, Tween, EasingFunction } from '@dcl/sdk/ecs'
import { Vector3 } from '@dcl/sdk/math'

export class AvocadoScript {
	constructor(
		public src: string,
		public entity: Entity,
	) {}

	start() {
		pointerEventsSystem.onPointerDown(
			{
				entity: this.entity,
				opts: { button: InputAction.IA_POINTER, hoverText: 'Collect' },
			},
			() => {
				this.collect()
			}
		)
	}

	collect() {
		Tween.setScale(
			this.entity,
			Vector3.One(),
			Vector3.Zero(),
			500,
			EasingFunction.EF_EASEINBOUNCE
		)
	}

	update(dt: number) {}
}
```

AI가 수행한 작업을 자세히 살펴보겠습니다.

* 튀는 애니메이션을 만들기 위해 다음을 사용했습니다 **트윈**. 트윈은 시간에 따라 엔터티의 위치, 회전 또는 크기가 점진적으로 전환되는 것을 설명합니다. 여기서 `Tween.setScale()` 는 아보카도를 전체 크기(`Vector3.One()`)에서 아무것도 없는 크기(`Vector3.Zero()`)로 500밀리초 동안 튀는 이징 곡선을 사용해 축소합니다. 트윈에 관한 자세한 내용은 다음을 참조하세요 [엔터티 이동하기](/creator/content-creator-ko/sdk7/3d/move-entities.md).
* 클릭 함수 내부에 트윈을 직접 작성하는 대신, 별도의 `collect()` 메서드를 만들었습니다. 필수는 아닙니다(AI가 클릭 함수 안에 트윈을 넣었다면 그것도 작동합니다). 하지만 좋은 방법입니다. 메서드는 코드를 읽기 쉽게 만들고 여러 위치에서 동일한 로직을 재사용할 수 있게 합니다.
* 아보카도에 "Collect" 힌트를 표시하기 위해 이를 다음으로 설정했습니다 `hoverText` 값.

미리 보기를 실행하고 아보카도를 클릭하세요. 멋지게 사라질 것입니다.

{% hint style="warning" %}
**📔 참고**: 아보카도는 크기 0으로 축소되지만 엔터티는 여전히 존재합니다. 씬을 가볍게 유지하려면 트윈이 끝난 뒤 엔터티를 삭제하는 것이 이상적입니다. 다음을 참조하세요 [트윈 완료 시](/creator/content-creator-ko/sdk7/3d/move-entities.md#on-tween-finished).
{% endhint %}

### 매 프레임 코드 실행하기

지금까지 모든 코드는 다음에서 실행되었습니다 `start()`. 다음을 사용해 봅시다 `update()` 아보카도가 계속 회전하도록 합니다. constructor와 다음을 교체하세요 `update()` 을 다음으로 바꾸세요:

```ts
	constructor(
		public src: string,
		public entity: Entity,
		public speed: number = 45,
	) {}

	update(dt: number) {
		const transform = Transform.getMutable(this.entity)
		transform.rotation = Quaternion.multiply(
			transform.rotation,
			Quaternion.fromAngleAxis(this.speed * dt, Vector3.Up())
		)
	}
```

또한 다음을 추가해야 합니다 `Transform` 과 `Quaternion` 파일 상단의 import에 추가하여 다음과 같게 만드세요:

```ts
import { engine, Entity, pointerEventsSystem, InputAction, Tween, EasingFunction, Transform } from '@dcl/sdk/ecs'
import { Vector3, Quaternion } from '@dcl/sdk/math'
```

{% hint style="info" %}
**💡 팁**: import를 직접 편집하는 대신 코드 편집기에 표시된 오류를 클릭하고 자동으로 추가하게 할 수 있습니다.
{% endhint %}

매 프레임마다 아보카도를 조금 더 회전시킵니다. 다음을 곱하면 `dt` 움직임이 부드럽고 프레임 속도와 무관해집니다. 플레이어의 컴퓨터가 얼마나 빠르게 실행되든 아보카도는 초당 45도씩 회전합니다.

왜냐하면 `속도` 는 constructor 매개변수이므로 Creator Hub의 Script 컴포넌트에도 필드로 표시됩니다. Script 컴포넌트 오른쪽 상단의 새로 고침 아이콘을 클릭해 확인한 뒤, 코드를 건드리지 않고 값을 조정하세요.

<img src="https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-0e88676864e337ab55bf98ae8bd23e2775ec0c60%2Fscript-refresh-button.png?alt=media" alt="새로 고침 버튼" width="360">

각 엔터티는 다음에 대한 자체 값을 저장합니다 **속도** 필드이므로 여러 아이템이 같은 스크립트를 공유하면서도 다르게 동작할 수 있습니다. 직접 해보세요. Ctrl + C와 Ctrl + V로 아보카도를 복사하고, 두 개가 겹치지 않도록 복사본을 이동한 다음 각각 다른 속도를 설정하세요. 이제 각 아보카도는 자기만의 속도로 회전합니다.

스크립트는 다른 스마트 아이템이 실행할 수 있는 액션을 노출하는 등 훨씬 더 많은 일을 할 수 있습니다. 다음을 참조하세요 [Script 컴포넌트](/creator/content-creator-ko/scene-editor/extend-with-code/script-component.md) 전체 내용을 확인하세요.

## Scene Editor에서 아이템 참조하기

Script 컴포넌트는 단일 아이템에 동작을 부여하는 가장 쉬운 방법이지만, 대안도 있습니다. 다음의 코드는 `index.ts` 에서 이름을 사용하여 시각적으로 추가한 모든 아이템을 가져올 수 있습니다 `engine.getEntityOrNullByName()`. 하나의 로직에 여러 아이템이 포함될 때나 모든 것을 한곳에서 관리하고 싶을 때 유용합니다. 다음에 표시되는 이름을 사용하세요 [엔티티 트리](/creator/content-creator-ko/scene-editor/get-started/scene-editor-essentials.md#the-entity-tree).

이 예시에서는 다음 이름의 엔터티를 사용합니다 **노란 상자**. 어떤 아이템이든 사용할 수 있으며, 엔터티 트리에 표시되는 이름을 정확히 작성하면 됩니다.

{% hint style="info" %}
**💡 팁**: 엔터티 트리에서 마우스 오른쪽 버튼을 클릭하고 다음을 선택하여 엔터티 이름을 바꿀 수 있습니다 **이름 바꾸기** 을 엔터티 트리에서 선택합니다.
{% endhint %}

```ts
export function main() {
	// 이전의 avocado2 코드
	// (...)

	const crate = engine.getEntityOrNullByName('Yellow Crate')

	if (crate) {
		pointerEventsSystem.onPointerDown(
			{
				entity: crate,
				opts: { button: InputAction.IA_POINTER, hoverText: 'Open' },
			},
			function () {
				console.log('CLICKED CRATE')
			}
		)
	}
}
```

여기서 `engine.getEntityOrNullByName()` 는 다음 이름의 엔터티에 대한 참조를 가져옵니다 *노란 상자*. `if (crate)` 검사는 엔터티가 실제로 씬에 존재하는지 확인합니다. 해당 이름의 엔터티가 없으면 `crate` 가 `null`. 참고: [참조 항목](https://github.com/decentraland/docs/tree/main/creator/sdk7/code/reference-items.md) 에서 자세한 정보를 확인하세요.

{% hint style="info" %}
**💡 팁**: Scene Editor를 통해 추가된 모든 엔터티는 다음이 실행될 때 이미 로드되어 있으므로 `main()` 에서 또는 다음에 의해 간접적으로 호출되는 함수에서 안전하게 참조할 수 있습니다 `main()`.
{% endhint %}

## 더 많은 튜토리얼

읽기 [씬 코딩](/creator/content-creator-ko/sdk7/getting-started/coding-scenes.md) 에서 Decentraland 씬의 작동 방식을 높은 수준에서 이해할 수 있습니다.

SDK7로 만든 예시는 다음에서 확인하세요 [예시 페이지](https://studios.decentraland.org/resources?sdk_version=SDK7), 여러 개의 작은 씬이 포함되어 있습니다.

다음을 참조하세요 **개발 가이드** 섹션에서 씬에 콘텐츠를 추가하는 방법에 관한 추가 지침을 확인하세요.

## 다른 개발자와 소통하기

다음을 방문하세요 [Decentraland Discord](https://dcl.gg/discord) 와 [Decentraland DAO Discord](https://discord.gg/bxHtcMxUs4) 에 참여하여 Decentraland Discord의 다음 채널에서 무엇이 가능하고 어떻게 하는지에 관한 활발한 토론에 참여하세요 **크리에이터** 섹션.

문제를 디버깅하려면 다음을 확인하세요 [문제 해결](/creator/content-creator-ko/sdk7/debugging/troubleshooting.md) 과 [디버그](/creator/content-creator-ko/sdk7/debugging/debug-in-preview.md) 섹션. 다음이 포함된 AI 어시스턴트 [SDK 스킬](/creator/content-creator-ko/sdk7/getting-started/vibe-coding.md) 이 설치되어 있다면 훌륭한 디버깅 동반자이기도 합니다. 콘솔의 오류 메시지를 붙여 넣거나 예상대로 동작하지 않는 부분을 설명하면 보통 코드에서 문제를 찾아낼 수 있습니다. 해결책을 찾지 못했다면 다음에 게시할 수 있습니다 [SDK 지원 카테고리](https://forum.decentraland.org/c/support-sdk/11) Decentraland 포럼에서.

## 3D 아트 에셋

좋은 경험에는 훌륭한 3D 아트가 어울립니다. 직접 그런 3D 모델을 만들고 싶다면, [3D 모델링 섹션](/creator/content-creator-ko/3d/3d-models.md). 하지만 코딩이나 게임 디자인 측면에 집중하고 싶다면 직접 에셋을 만들 필요가 없습니다! 다음을 참조하세요 [유용한 자료](/creator/content-creator-ko/sdk7/getting-started/useful-resources.md) 씬용 3D 모델을 구하는 데 사용할 수 있는 에셋 라이브러리 및 AI 도구를 확인하세요.

## 씬 게시

Decentraland NAME, ETH ENS 이름 또는 LAND를 소유하고 있거나 이를 소유한 사람에게 권한을 부여받았다면, 씬을 Decentraland에 업로드할 수 있습니다. 다음을 참조하세요 [게시](/creator/content-creator-ko/sdk7/publishing/publishing.md).

## 기타 유용한 정보

* [AI와 함께하는 바이브 코딩](/creator/content-creator-ko/sdk7/getting-started/vibe-coding.md)
* [개발 워크플로](/creator/content-creator-ko/sdk7/getting-started/dev-workflow.md)
* [씬 편집](/creator/content-creator-ko/scene-editor/get-started/about-editor.md)
* [Scene editor essentials](/creator/content-creator-ko/scene-editor/get-started/scene-editor-essentials.md)
* [게임을 위한 설계 제약](/creator/content-creator-ko/sdk7/designing-the-experience/design-games.md)
* [3D 모델링](/creator/content-creator-ko/3d/3d-models.md)
* [장면 제한](/creator/content-creator-ko/sdk7/optimizing/scene-limitations.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.decentraland.org/creator/content-creator-ko/sdk7/getting-started/sdk-101.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
