PlayDrop ゲームのローカルパーティー、ゲームパッド、スマホコントローラー
sdk.device で物理ゲームパッドと PlayDrop のスマホコントローラーを読み取り、ローカルプレイヤーの枠を追跡し、コントローラー対応とローカルパーティーの人数を宣言します。
ローカルパーティーとは、1つの画面で複数の人が、それぞれコントローラーを持って遊ぶことです。コントローラーは物理ゲームパッドか、コードを読み取ると PlayDrop がコントローラーに変えるスマホです。ゲームは、ウェブサイトでもアプリでも、SDK を通じてすべてのコントローラーを同じ方法で読み取ります。
コントローラーとパーティーの人数を宣言する
{
"types": ["solo", "party"],
"party": { "local": [1, 2, 3, 4] },
"controller": { "support": "optional", "type": "simpler" }
}controller.supportはoff、optional、requiredのいずれかです。offの場合も含め、すべてのゲームで宣言してください。controller.typeは、ゲームに最低限必要な操作系を示します。any(方向、決定、キャンセル)、simpler(スティック1本、フェイスボタン4つ、メニュー。スマホコントローラーも対象)、standard(十字キー、押し込みできるスティック2本、フェイスボタン4つ、ショルダーボタン2つ、トリガー2つ、メニュー)のいずれかです。party.localには、1つの画面で遊べる正確な人数を列挙します。1を含めるにはsoloタイプが必要です。コントローラー対応を有効にした場合、列挙したすべての人数をコントローラーで遊べる必要があります。
コントローラーを読み取る
await sdk.device.enableControllerInput().catch(() => { /* keep keyboard and touch */ });
const stop = sdk.device.onButton(({ playerIndex, button, pressed }) => {
if (button === "south" && pressed) jump(playerIndex);
});
function update() {
for (const slot of sdk.device.localPlayers) {
const pad = sdk.device.gamepad(slot.playerIndex);
if (pad?.connected) move(slot.playerIndex, pad.axes[0], pad.axes[1]);
}
requestAnimationFrame(update);
}
update();init()のあとにenableControllerInput()を1回呼び出します。ホストが入力を提供できない場合はcontroller_input_unavailableまたはcontroller_input_timeoutで拒否されますが、ゲームはそのまま動き続けます。gamepad(playerIndex)は、ブラウザの標準配置に沿ったスナップショットを返します。axes(左スティックの x/y、右スティックの x/y、-1〜1)、17個のbuttons、source(physicalまたはvirtual)、idです。playerIndex0 がプレイヤー1です。- ボタンには
southやeastのような位置による名前があります。pad.label("south")は表示すべきボタン名を返し、コントローラーに応じて「A」「Cross」「B」などになります。pad.has("dpad")で、その操作系があるかどうかがわかります。 - メニューボタンとホームボタンは PlayDrop が使うため、常に離された状態として読み取られます。
navigator.getGamepads()は絶対に呼び出さないでください。スマホコントローラーは SDK を通じてしかゲームに届かず、PlayDrop が警告を記録します。
ローカルプレイヤーの枠
sdk.device.localPlayers は、プレイヤーが選んだ枠 { playerIndex, gamepadKey } を列挙し、onLocalPlayersChange(callback) が変更を通知します。切断されたコントローラーも枠を保持します。メンバー構成が変わったり空になったりしたときは、クラッシュさせずに適切なメニューに戻ってください。コントローラーが1台だけなら、それは普通の入力であり、パーティーではありません。
ボタンから sdk.social.openParty({ mode: "local" }) を呼び出すと、スマホ用の QR コードと接続済みのゲームパッドを表示する、PlayDrop のペアリング画面が開きます。宣言したモードだけを提供してください。
ローカルかオンラインか、両方は不可
ホストはゲームをローカルパーティーかオンラインパーティーのどちらかとして開始し、両方を同時に使うことはありません。ローカルのプレイヤーはオンラインのルームに参加できません。友達とオンラインで遊ぶ方法は、オンラインパーティーと音声をご覧ください。
ソファで遊ぶことを考えて設計する
各プレイヤーの色とコントローラーのボタン表示を見せ、誰でもボタンを押せば参加できるようにし、ソファからでも HUD が読めるようにしましょう。ソロプレイ用に、タッチとキーボードの操作も残してください。