# PlayDrop のゲームアセット：同梱ファイル、所有アセット、共有パック

PlayDrop ゲームに画像、サウンド、動画、3D を含める方法：同梱ファイル、catalogue.json で宣言するゲーム所有アセット、公開アセットとパック、sdk.assets による実行時の参照。

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

ゲームにアートやサウンドを含める方法は3つあります。必要なことができる、いちばんシンプルな方法を選びましょう。

| 方法 | 向いている用途 | やり方 |
|---|---|---|
| 同梱ファイル | そのゲームだけが使うものすべて | パッケージに含め、相対パスで読み込む |
| ゲーム所有アセット | PlayDrop に掲載したい、再利用したい、販売したいアセット | `ownedAssets` で宣言する |
| 公開アセットとパック | ほかのクリエイターが公開したアセットの再利用 | `uses` で参照する |

## 同梱ファイル

ファイルをゲームと同じ場所に置き、`assets/music.mp3` のような相対パスで読み込みます。ファイルは[パッケージ](https://www.playdrop.ai/ja/create/learn/packaging)と一緒にアップロードされ、ブラウザとアプリにキャッシュされます。起動に必要なファイルを `prefetch.required` に記載すると、アプリが早めにダウンロードできます（[ライフサイクル](https://www.playdrop.ai/ja/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`、販売する場合は `shopListed` と `shopPriceCredits`。

## 公開アセットとパック

公開済みのアセットは正確なリビジョンで、パックはバージョンで参照します。

```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/ja/create/learn/ai-assets)で作れます。PlayDrop が扱っていない形式については、[独自アセット形式](https://www.playdrop.ai/ja/create/learn/custom-assets)をご覧ください。

## 関連ガイド

- [AI アセット生成](https://www.playdrop.ai/ja/create/learn/ai-assets): PlayDrop でゲーム用の画像、音楽、効果音、音声合成、動画、3D モデルを生成します。ブラウザからはプレイヤーの確認付きで、ゲームサーバーからはクリエイターの負担で生成できます。
- [独自形式とプレイヤーの作品](https://www.playdrop.ai/ja/create/learn/custom-assets): アセット仕様で独自のアセット形式を定義し、ゲームが読み書きする形式を宣言して、プレイヤーがレベルやキャラクターなどの作品を sdk.assets.custom で保存・公開できるようにします。
- [パッケージ化と .play](https://www.playdrop.ai/ja/create/learn/packaging): ルートに catalogue.json を置いたビルド済みのフォルダー、ZIP、.play を用意し、掲載メディアとサーバーを宣言して、prepare_catalogue_upload でアップロードします。
