# PlayDrop의 게임 에셋: 포함 파일, 소유 에셋, 공유 팩

PlayDrop 게임에 이미지, 사운드, 동영상, 3D를 담아 보내세요. 포함 파일, catalogue.json에 선언한 게임 소유 에셋, 공개 에셋과 팩, sdk.assets 런타임 조회를 다룹니다.

Source: https://www.playdrop.ai/ko/create/learn/game-assets

게임에 아트와 사운드를 담는 방법은 세 가지입니다. 필요한 일을 해내는 가장 간단한 방법을 고르세요.

| 방법 | 적합한 용도 | 사용법 |
|---|---|---|
| 포함 파일 | 그 게임에서만 쓰는 모든 것 | 패키지에 넣어 보내고 상대 경로로 불러오기 |
| 게임 소유 에셋 | PlayDrop에 등록하거나, 재사용하거나, 판매하고 싶은 에셋 | `ownedAssets`에 선언하기 |
| 공개 에셋과 팩 | 다른 크리에이터가 게시한 에셋 재사용 | `uses`에서 참조하기 |

## 포함 파일

파일을 게임 옆에 두고 `assets/music.mp3` 같은 상대 경로로 불러오세요. 파일은 [패키지](https://www.playdrop.ai/ko/create/learn/packaging)와 함께 업로드되고 브라우저와 앱이 캐시합니다. 시작에 필요한 파일은 `prefetch.required`에 나열해 앱이 미리 내려받을 수 있게 하세요([수명 주기](https://www.playdrop.ai/ko/create/learn/lifecycle)). 간단한 HTML 게임은 대신 에셋을 파일 안에 직접 넣어야 합니다.

## 게임 소유 에셋

게임이 소유하는 에셋은 게임의 카탈로그 항목에 선언하세요. 각 에셋은 이 게임에 연결된, 자체 페이지가 있는 PlayDrop 에셋이 됩니다.

```json
{
  "ownedAssets": [
    { "name": "moon-theme", "runtimeKey": "music.main", "displayName": "Moon theme",
      "category": "AUDIO", "files": { "primary": "assets/moon-theme.mp3" } },
    { "name": "astronaut", "runtimeKey": "sprites.player", "displayName": "Astronaut",
      "category": "SPRITESHEET", "files": { "atlas": "assets/astronaut.png", "manifest": "assets/astronaut.json" } }
  ]
}
```

- `category`는 `IMAGE`, `VIDEO`, `AUDIO`, `SPRITESHEET`, `MODEL_3D` 또는 `CUSTOM`이며, `subcategory`와 `format`으로 더 세분화합니다.
- `files`는 역할을 경로에 연결합니다. 오디오에는 `primary`가, 스프라이트시트에는 `atlas`와 `manifest`가 필요합니다.
- `runtimeKey`는 게임이 런타임에 에셋을 찾을 때 쓰는 이름입니다.
- 선택 사항: `visibility`, `license`, `tags`, 그리고 판매하려면 `shopPriceCredits`와 함께 `shopListed`.

## 공개 에셋과 팩

게시된 에셋은 정확한 리비전으로, 팩은 버전으로 참조하세요.

```json
{
  "uses": {
    "assets": [{ "ref": "asset:someone/forest-tiles@r3", "runtimeKey": "tiles.forest" }],
    "packs": ["pack:someone/ui-kit@1.2.0"]
  }
}
```

[PlayDrop 에셋](https://www.playdrop.ai/assets)에서 둘러보거나 `sdk.assets.catalog.listPublic()`, `sdk.assets.packs.listPublic()`, `sdk.search.query()`로 찾아보세요. 공개 게임은 공개 에셋과 팩만 사용할 수 있습니다. 각 에셋의 라이선스를 지키세요.

## 런타임에 에셋 찾기

```js
const music = sdk.assets.resolveAppAsset("music.main");
const file = music.files.find((entry) => entry.role === "primary");
audioElement.src = file.url;

for (const asset of sdk.assets.listAppAssets()) console.log(asset.runtimeKey, asset.sourceType);
```

각 결과에는 `assetRef`, `runtimeKey`, `sourceType`(`OWNED`, `DIRECT` 또는 `PACK`)과 `role`, `url`, `contentType`, `sizeBytes`가 담긴 `files`가 있습니다.

## 커넥터가 받는 것

AI 앱은 이미지, 동영상, 오디오, 스프라이트시트, 미리 구운 3D 모델을 업로드할 수 있으며, 미리 구운 절차적 이미지와 스프라이트시트도 포함됩니다. 실행 가능한 3D 모델(`procedural` 하위 카테고리나 `CUSTOM` 형식을 쓰는 `MODEL_3D`)은 PlayDrop 자체 도구에서는 실행되지만, API가 이를 검증하려고 크리에이터 코드를 실행하지 않기 때문에 커넥터에서는 거부됩니다. GLB 같은 표준 형식으로 구워서 올리거나, PlayDrop에 이미 게시된 버전을 참조하세요.

새 아트와 사운드는 [AI 에셋 생성](https://www.playdrop.ai/ko/create/learn/ai-assets)으로 만드세요. PlayDrop이 모르는 형식은 [사용자 지정 에셋 형식](https://www.playdrop.ai/ko/create/learn/custom-assets)을 참고하세요.

## 관련 가이드

- [AI 에셋 생성](https://www.playdrop.ai/ko/create/learn/ai-assets): PlayDrop에서 게임용 이미지, 음악, 효과음, 음성, 동영상, 3D 모델을 만드세요. 브라우저에서는 플레이어가 확인하고, 게임 서버에서는 크리에이터가 비용을 냅니다.
- [사용자 지정 형식과 플레이어 창작물](https://www.playdrop.ai/ko/create/learn/custom-assets): 에셋 사양으로 나만의 에셋 형식을 정의하고, 게임이 읽고 쓰는 형식을 선언하고, sdk.assets.custom으로 플레이어가 레벨, 캐릭터 등 창작물을 저장하고 게시하게 하세요.
- [패키징과 .play](https://www.playdrop.ai/ko/create/learn/packaging): catalogue.json을 루트에 둔 빌드 폴더, ZIP 또는 .play를 구성하고, 등록 정보 미디어와 서버를 선언한 뒤 prepare_catalogue_upload로 업로드하세요.
