# แอสเซ็ตเกมบน PlayDrop: ไฟล์ในแพ็กเกจ แอสเซ็ตของเกม และแพ็กที่ใช้ร่วมกัน

ใส่ภาพ เสียง วิดีโอ และ 3D ไปกับเกม PlayDrop: ไฟล์ในแพ็กเกจ แอสเซ็ตที่เกมเป็นเจ้าของ แอสเซ็ตและแพ็กสาธารณะ และการค้นหาขณะรันด้วย sdk.assets

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

เกมพกภาพและเสียงของตัวเองไปได้สามวิธี เลือกวิธีที่ง่ายที่สุดที่ทำได้ตามที่คุณต้องการ

| วิธี | เหมาะสำหรับ | ทำอย่างไร |
|---|---|---|
| ไฟล์ในแพ็กเกจ | ทุกอย่างที่ใช้เฉพาะในเกมนี้ | ใส่ไว้ในแพ็กเกจและโหลดด้วยพาธแบบสัมพัทธ์ |
| แอสเซ็ตที่เกมเป็นเจ้าของ | แอสเซ็ตที่คุณอยากให้แสดงบน PlayDrop นำกลับมาใช้ซ้ำ หรือขายได้ | ประกาศใน `ownedAssets` |
| แอสเซ็ตและแพ็กสาธารณะ | นำแอสเซ็ตที่ครีเอเตอร์คนอื่นเผยแพร่มาใช้ | อ้างอิงใน `uses` |

## ไฟล์ในแพ็กเกจ

วางไฟล์ไว้ข้างเกมและโหลดด้วยพาธแบบสัมพัทธ์ เช่น `assets/music.mp3` ไฟล์เหล่านี้อัปโหลดไปพร้อม[แพ็กเกจ](https://www.playdrop.ai/th/create/learn/packaging) และถูกแคชโดยเบราว์เซอร์และแอป ระบุไฟล์ที่จำเป็นต่อการเริ่มเกมใน `prefetch.required` เพื่อให้แอปดาวน์โหลดได้ล่วงหน้า ([วงจรชีวิต](https://www.playdrop.ai/th/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`) และ `files` ที่มี `role`, `url`, `contentType` และ `sizeBytes`

## สิ่งที่คอนเนกเตอร์รับ

แอป AI ของคุณอัปโหลดภาพ วิดีโอ เสียง สไปรต์ชีต และโมเดล 3D สำเร็จรูปได้ รวมถึงภาพและสไปรต์ชีตแบบโพรซีเจอรัลที่แปลงเป็นไฟล์สำเร็จรูปแล้ว โมเดล 3D ที่รันโค้ดได้ (`MODEL_3D` ที่มีหมวดย่อย `procedural` หรือรูปแบบ `CUSTOM`) ทำงานในเครื่องมือของ PlayDrop เอง แต่คอนเนกเตอร์จะปฏิเสธ เพราะ API ไม่รันโค้ดของครีเอเตอร์เพื่อตรวจสอบ ให้แปลงเป็นรูปแบบมาตรฐาน เช่น GLB หรืออ้างอิงเวอร์ชันที่เผยแพร่บน PlayDrop แล้ว

สร้างภาพและเสียงใหม่ได้ด้วย[การสร้างแอสเซ็ตด้วย AI](https://www.playdrop.ai/th/create/learn/ai-assets) สำหรับรูปแบบที่ PlayDrop ไม่รู้จัก ดู[รูปแบบแอสเซ็ตที่กำหนดเอง](https://www.playdrop.ai/th/create/learn/custom-assets)

## คู่มือที่เกี่ยวข้อง

- [การสร้างแอสเซ็ตด้วย AI](https://www.playdrop.ai/th/create/learn/ai-assets): สร้างภาพ เพลง เสียง เสียงพูด วิดีโอ และ 3D ให้เกมใน PlayDrop จากเบราว์เซอร์โดยให้ผู้เล่นยืนยัน หรือจากเซิร์ฟเวอร์โดยครีเอเตอร์เป็นผู้จ่าย
- [รูปแบบที่กำหนดเองและผลงานผู้เล่น](https://www.playdrop.ai/th/create/learn/custom-assets): กำหนดรูปแบบแอสเซ็ตของคุณเองด้วยสเปกแอสเซ็ต ประกาศรูปแบบที่เกมอ่านหรือเขียน และให้ผู้เล่นบันทึกและเผยแพร่ผลงานด้วย sdk.assets.custom
- [การจัดแพ็กเกจและ .play](https://www.playdrop.ai/th/create/learn/packaging): จัดโฟลเดอร์เกมที่บิลด์แล้ว ZIP หรือ .play ให้มี catalogue.json ที่ราก ประกาศสื่อของหน้าเกมและเซิร์ฟเวอร์ แล้วอัปโหลดด้วย prepare_catalogue_upload
