ปาร์ตี้ออนไลน์และแชทเสียงในเกม PlayDrop
ให้เพื่อนเล่นด้วยกันออนไลน์: ประกาศขนาดปาร์ตี้ เปิดหน้าต่างปาร์ตี้ของ PlayDrop เข้าห้องที่จองไว้ด้วย sdk.multiplayer.join และควบคุมแชทเสียงในห้อง
ปาร์ตี้ PlayDrop คือกลุ่มเพื่อนที่ย้ายไปเล่นเกมต่างๆ ด้วยกัน เมื่อปาร์ตี้เริ่มเกมของคุณ PlayDrop จะจองที่นั่งให้สมาชิกในห้องหนึ่งของเซิร์ฟเวอร์คุณ เพื่อให้เพื่อนเข้ามาอยู่ในแมตช์เดียวกันแทนที่จะถูกแยกกัน แชทเสียงทำงานใน PlayDrop ไม่ใช่ในเกมของคุณ
สิ่งที่ต้องมี
- เซิร์ฟเวอร์เกมเรียลไทม์: ปาร์ตี้เล่นในห้อง Colyseus ของคุณ
- ผู้เล่นที่เข้าสู่ระบบแล้ว: ห้องปฏิเสธผู้เยี่ยมชม
- การประกาศเหล่านี้ใน catalogue.json:
{
"types": ["solo", "online", "party"],
"party": { "online": [2, 3, 4] },
"roomVoice": true,
"server": { "entry": "server/index.mjs", "rooms": ["game"] }
}party.online ระบุขนาดกลุ่มที่แน่ชัด สูงสุด 4 คน ที่เข้ามาด้วยกันได้ [2, 4] ไม่รวม 3 ค่านี้คือขนาดของกลุ่มที่เข้ามา ไม่ใช่ความจุของห้อง: ปาร์ตี้สี่คนสองปาร์ตี้ใช้ห้องแปดที่นั่งร่วมกันได้ party ต้องมีประเภท party และ party.online ต้องมี online ส่วน roomVoice: true เปิดแชทเสียงในห้องและต้องมี online
เข้าห้องที่ถูกต้อง
if (!sdk.me.isLoggedIn) {
await sdk.me.promptLogin();
}
const room = await sdk.multiplayer.join("game", { mode: "versus" });join ใช้ที่นั่งปาร์ตี้ที่จองไว้ให้ผู้เล่นเมื่อ PlayDrop เป็นผู้เปิดเกมให้ปาร์ตี้ หากไม่ใช่จะเข้าร่วมแบบอิสระ หากการเข้าร่วมของปาร์ตี้ล้มเหลว ฟังก์ชันจะปฏิเสธ และไม่ย้ายผู้เล่นไปห้องอื่นอย่างเงียบๆ ผู้เยี่ยมชมจะได้รับ authentication_required และ PlayDrop จะแสดงหน้าเข้าสู่ระบบ ให้เข้าร่วมอีกครั้งจาก sdk.me.onAuthChange ใช้ห้องเดิมตลอดทุกรอบ
หลังโหลดหน้าใหม่ sdk.multiplayer.reconnect(roomName, token) จะคืนที่นั่งที่จองไว้ด้วยโทเค็นสำหรับเชื่อมต่อกลับ (reconnection token) ที่คุณเก็บไว้แบบส่วนตัวสำหรับเกม เวอร์ชัน และผู้ใช้นี้ ทิ้งโทเค็นแล้วเรียก join เมื่อได้ multiplayer_reconnect_expired, multiplayer_reconnect_unavailable หรือ party_reconnect_mismatch
หน้าต่างปาร์ตี้
จากปุ่มในเกม sdk.social.openParty({ mode: "online" }) จะเปิดหน้าต่างปาร์ตี้ของ PlayDrop ซึ่งผู้เล่นเชิญเพื่อนและเปิดหรือปิดแชทเสียงได้ หากมีปาร์ตี้อยู่แล้วจะใช้ปาร์ตี้นั้นต่อ openParty() เปิดเมนูปาร์ตี้ และ openParty({ section: "voice" }) เปิดการตั้งค่าแชทเสียง อย่าใช้ mode กับ section ร่วมกัน promise จะเสร็จสิ้นเมื่อหน้าต่างปิด รวมถึงเมื่อยกเลิก
อ่านข้อมูลปาร์ตี้ด้วย sdk.social.getParty() หรือ sdk.social.onPartyChange(callback) ซึ่งส่งสถานะปัจจุบันมาก่อน: { partyId, leaderUserId, revision, members, launch } launch.status เป็น joining หรือ ready เมื่อปาร์ตี้กำลังเล่นเกมนี้ การเป็นสมาชิกอย่างเดียวไม่ได้หมายความว่าผู้เล่นอยู่ห้องเดียวกัน ให้ใช้ join
การเป็นสมาชิกปาร์ตี้เป็นของ PlayDrop: เกมเพิ่มหรือนำสมาชิกออกจากปาร์ตี้ไม่ได้ และควบคุมไมโครโฟนไม่ได้ ผู้เล่นเชิญเพื่อนเข้าปาร์ตี้จากหน้าต่างนี้ เกมยังส่งการ์ดคำเชิญหรือการ์ดท้าแข่งของตัวเองให้เพื่อนได้ด้วย sdk.social.sendMessage ดูการแชร์ เพื่อน และคำเชิญ
แชทเสียงในห้อง
เมื่อตั้ง roomVoice: true ทุกคนในห้องคุยกันได้โดยไม่ต้องมีโค้ดเซิร์ฟเวอร์ หากต้องการเปลี่ยนว่าใครได้ยินใคร ให้ผูกห้องบนเซิร์ฟเวอร์และตั้งนโยบาย:
import { playdrop } from "@playdrop/server";
const platform = playdrop.multiplayer.forRoom(this);
platform.voice.setPolicy("team");
platform.voice.setTeam(client.auth, "red");นโยบายมี all, team, proximity (พร้อม { range }) และ off setAudience(player, audience) กำหนดค่าเฉพาะผู้เล่นหนึ่งคน และ updatePositions([{ player, position: { x, y, z } }]) ส่งตำแหน่งให้โหมดความใกล้เคียง ส่ง null เพื่อล้างทีมหรือค่าเฉพาะผู้เล่น PlayDrop เป็นผู้บังคับว่าใครได้ยินใคร ในเบราว์เซอร์ sdk.multiplayer.voice.updateSpatialState({ listener: { position, forward, up }, speakers: [{ userId, position }] }) ปรับได้เฉพาะระดับเสียงและการแพน
แชทเสียงขึ้นกับความยินยอม การปิดเสียง และการบล็อกของผู้เล่น และขึ้นกับบิลด์ของโฮสต์และการเปิดใช้งานแบบทยอย
การหยุดชั่วคราว
แคปซูลปาร์ตี้ไม่ได้หยุดการเล่น การหยุดชั่วคราวของ PlayDrop หยุดไคลเอนต์ของคุณ แต่ห้องยังเชื่อมต่ออยู่และเซิร์ฟเวอร์ยังทำงานต่อ การหยุดของผู้เล่นคนหนึ่งต้องไม่ทำให้แมตช์หยุดสำหรับคนอื่น หากต้องการหยุดแมตช์ ให้ทำบนเซิร์ฟเวอร์
ทดสอบ
อัปโหลดเวอร์ชันส่วนตัว แล้วเปิดลิงก์ทดสอบในสองหน้าต่างด้วย player=1 และ player=2 ตามที่อธิบายไว้ในเซิร์ฟเวอร์เกมเรียลไทม์ ปาร์ตี้ในเครื่องที่ใช้คอนโทรลเลอร์เป็นอีกโหมดหนึ่ง: ดูปาร์ตี้ในเครื่องและคอนโทรลเลอร์