# PlayDrop ゲームの AI アセット生成

PlayDrop でゲーム用の画像、音楽、効果音、音声合成、動画、3D モデルを生成します。ブラウザからはプレイヤーの確認付きで、ゲームサーバーからはクリエイターの負担で生成できます。

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

PlayDrop では、画像、音楽、効果音、音声合成、動画、3D モデルを生成できます。ゲームを作るときに使うことも、ゲームの中で使ってプレイヤーに生成コンテンツを届けることもできます。

## ゲームを作るとき

サインイン中のクリエイターは、PlayDrop ウェブサイトの「作成」からアセット（画像、音楽、サウンド、音声合成、動画、3D）を生成できます。ゲームを作りながら PlayDrop Cloud に頼むこともできます。生成のたびにクレジットがかかり、金額は開始前に表示されます。生成結果はあなたが所有するアセットになります。ほかのアセットと同じように使えます。パッケージにダウンロードするか、`uses` で参照してください（[ゲームアセット](https://www.playdrop.ai/ja/create/learn/game-assets)）。

## ゲームの中で：ブラウザから

`sdk.ai.<kind>.createTask(request)` は、現在のプレイヤー向けのメディア生成を PlayDrop に依頼します。PlayDrop はクレジットの金額を示した確認画面をプレイヤーに表示し、プレイヤーが支払います。生成結果はそのプレイヤーだけのものになります。

```js
try {
  const task = await sdk.ai.image.createTask({ input: "A friendly robot pet, flat colors", aspectRatio: "1:1" });
  const done = await waitForTask(task.id);
  const blob = await sdk.ai.tasks.downloadFile(done.id);
  showPet(URL.createObjectURL(blob));
} catch (error) {
  if (error.message === "ai_generation_cancelled") return;
  throw error;
}

async function waitForTask(id) {
  for (;;) {
    const task = await sdk.ai.tasks.get(id);
    if (task.status === "DONE") return task;
    if (["FAILED", "CANCELLED", "EXPIRED"].includes(task.status)) throw new Error(task.status);
    await new Promise((resolve) => setTimeout(resolve, 2000));
  }
}
```

- 種類：`image`、`music`、`sfx`、`speech`、`video`、`model3d`。`sdk.ai.inputs.upload(blob)` で参照画像を送信します。
- 同時に開ける確認画面は1つだけです。2回目の呼び出しは `ai_generation_in_progress` で拒否されます。
- ブラウザからのテキストと JSON の生成はホスト型ゲームでは使えず、`app_ai_generation_disabled` が返ります。サーバーを使ってください。
- プレイヤーの操作をきっかけに、`play` 中に呼び出し、キャンセルにも対応してください。

## ゲームの中で：サーバーから

[ゲームサーバー](https://www.playdrop.ai/ja/create/learn/game-servers)では、`@playdrop/server` の `playdrop.ai` でテキスト、JSON、画像、音楽、効果音、音声合成、動画、3D を生成できます。費用はクリエイターが支払い、生成結果も既定ではクリエイターが所有します。`{ owner: client.auth }` を渡すと、条件を満たす生成結果をそのプレイヤーに渡せます。

```js
import { playdrop } from "@playdrop/server";

const task = await playdrop.ai.speech.createTask({ input: "Welcome back, captain." }, { owner: client.auth });
// Later, once the task is DONE:
const file = await playdrop.ai.tasks.downloadFile(task.id, { role: "primary" });
client.send("speech", { bytes: new Uint8Array(await file.arrayBuffer()), contentType: file.type });
```

- 生成されたファイルは非公開です。サーバーでダウンロードし、そのデータは対象のプレイヤーにだけ送ってください。
- 音声合成のリクエストは最大40語までです。
- テストプレイヤーによる生成はクリエイターの所有のままで、テストモードで実行されます。
- これらの呼び出しはアップロード済みのゲームで動作し、ローカル開発では動作しません。

生成にはクレジットがかかるため、プレイヤーが生成を実行できる頻度を制限しましょう。また、ゲームをその機能中心に作り込む前に、タスクの作成からプレイヤーが実際に見たり聞いたりするまで、1件のリクエストが最後まで通ることを確かめてください。

## 関連ガイド

- [ゲームアセット](https://www.playdrop.ai/ja/create/learn/game-assets): PlayDrop ゲームに画像、サウンド、動画、3D を含める方法：同梱ファイル、catalogue.json で宣言するゲーム所有アセット、公開アセットとパック、sdk.assets による実行時の参照。
- [リアルタイムゲームサーバー](https://www.playdrop.ai/ja/create/learn/game-servers): MongoDB データベース付きのホスト型 Colyseus 0.17 サーバーでゲームを動かし、ブラウザから SDK で接続し、2人のプレイヤーでテストする方法と制限を説明します。
- [収益化](https://www.playdrop.ai/ja/create/learn/monetization): requestReview でレビューを依頼し、チップを受け取り、sdk.shop でアイテムを販売し、インタースティシャル広告とリワード広告を表示します。それぞれのクリエイターの取り分も説明します。
