# PlayDrop 遊戲的 AI 素材生成

在 PlayDrop 為遊戲生成圖片、音樂、音效、語音、影片與 3D 模型：可從瀏覽器經玩家確認後生成，或從遊戲伺服器生成並由創作者付費。

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

PlayDrop 可以生成圖片、音樂、音效、語音、影片與 3D 模型。你可以在製作遊戲時使用，也可以在遊戲中使用，讓玩家獲得生成的內容。

## 製作遊戲時

已登入的創作者可以在 PlayDrop 網站的「創作」中生成素材（圖片、音樂、音效、語音、影片與 3D），或在製作遊戲時請 PlayDrop Cloud 生成。每次生成都要花費點數，開始前會顯示費用，生成結果會成為你擁有的素材。像其他素材一樣使用即可：下載到你的套件中，或在 `uses` 中參照（[遊戲素材](https://www.playdrop.ai/zh-hant/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)` 可傳送參考圖片。
- 同一時間只能開啟一個確認視窗；第二次呼叫會以 `ai_generation_in_progress` 拒絕。
- 託管遊戲無法從瀏覽器生成文字與 JSON，呼叫會傳回 `app_ai_generation_disabled`。請改用伺服器。
- 請在玩家操作時、於 `play` 階段呼叫，並處理取消的情況。

## 在遊戲中：從伺服器

在[遊戲伺服器](https://www.playdrop.ai/zh-hant/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 個字詞。
- 測試玩家的生成結果仍歸創作者所有，並以測試模式執行。
- 這些呼叫適用於已上傳的遊戲，無法在本機開發環境中使用。

生成需要花費點數，因此請限制玩家觸發的頻率；在圍繞它打造遊戲之前，先驗證一次完整的請求，從建立生成工作一直到玩家實際看到或聽到結果。

## 相關指南

- [遊戲素材](https://www.playdrop.ai/zh-hant/create/learn/game-assets): 隨 PlayDrop 遊戲提供圖片、音效、影片與 3D：內附檔案、在 catalogue.json 宣告的遊戲自有素材、公開素材與素材包，以及用 sdk.assets 在執行時查找。
- [即時遊戲伺服器](https://www.playdrop.ai/zh-hant/create/learn/game-servers): 為你的遊戲執行附帶 MongoDB 資料庫的託管 Colyseus 0.17 伺服器，用 SDK 從瀏覽器連線，用兩位玩家測試，並了解各項限制。
- [營利](https://www.playdrop.ai/zh-hant/create/learn/monetization): 用 requestReview 請求評論、接受打賞、用 sdk.shop 販售物品、顯示插頁式與獎勵式廣告，並了解創作者從每一項獲得多少分成。
