Roblox 実装例 · Ball Game
Ball game open source の ball game.rbxl が元です。5 秒待ち、ピンクの球を 3 枚のずれた壁の間に押して進め、WinPiece に触れると金色になり Winner を表示するルールを保ちます。
原作の確認
Roblox Studio でプレイ後に停止し、元の .rbxl を変えずにスクリプト、アバター、シーン、プロパティを調べます。

原作の人物、草地、壁、灰色の土台、ゴール。

GetWinner は球と WinPiece の接触を監視。
2 つのスクリプトは球生成と勝利判定を担当し、描画、人物、入力、カメラ、アニメーション、物理、サーバー環境は Roblox が提供します。球は 5×5×5 studs、草地は 18×1×74、壁の中心は (22,17.5,34)、(32,17.5,15)、(21.5,17.5,-4)。本例専用の値です。
Ball.Touched:Connect(function(partTouching)
if partTouching.Name == "WinPiece" then
Ball.BrickColor = BrickColor.new("Gold")
warn("Winner!")
game.Workspace.Map1.PlayerWon.Value = true
end
end)単純な Part シーンなら、Play 停止中に以下を Studio Command Bar で実行し Output に属性を表示できます。読み取り専用で、複雑なメッシュ、テクスチャ、リグは別途扱います。H5 を出力するコマンドではありません。
for _, part in ipairs(workspace:GetDescendants()) do
if part:IsA("BasePart") then
print(part:GetFullName(), part.Position, part.Size,
part.Material, part.Transparency)
end
endH5 との対応
| 元の処理 | ブラウザ版 |
|---|---|
CreateBall: wait(5)、Part、Neon | main.js:待機、表示メッシュ、動的剛体 |
| GetWinner: Touched、PlayerWon | main.js:一度だけ勝利、金色の球、Winner |
| Map1、WinPiece、スポーン | level.js + main.js:配置、形状、透明な壁を含む衝突 |
| 草・レンガ・金属・土・空 | environment.js:材質とローカルテクスチャ |
| R15 Man、Pal Hair、シャツ、ジーンズ | avatar.js:15 部位、髪、笑顔、服、白底の靴 |
| Humanoid と三人称カメラ | main.js、avatar.js、camera.js:移動、ジャンプ、動作、追従・回転・ズーム |
| Message / Hint | HTML/CSS の HUD、開始・ポーズ・勝利画面 |
元は実行時にアカウントの Avatar を読み込みます。本例は公式メッシュを直接取り込まず、ローカル形状とテクスチャで外観を再現しました。Part は実際の配置を再現しています。他のゲームでは権限のあるモデル・テクスチャを再利用できます。

再現した人物の正面:髪、笑顔、青黒の服、濃いズボン、白い靴底。

側面:髪、身体の分割、靴の形状。
換算は 1 stud = 0.3 m、原点 (27,15,15)、球半径 0.75 m。座標変換、質量、摩擦、転がりの減衰、速度上限は自分のゲームに合わせて調整します。

3 つの障害物、境界、ゴールを元の配置に再構築。
ballBody.addEventListener('collide', event => {
if (event.body !== winPiece.body || state.mode !== 'playing' || state.won) return;
state.won = true;
state.phase = 'finished';
pink.color.set('#fff000');
pink.emissive.set('#fff000');
glow.material.color.set('#fff54b');
document.querySelector('#status').textContent = 'Winner!';
show('won');
});ブラウザ版にはタッチ移動・ジャンプ、ポーズ・再開、リプレイ、全画面、人物表示、WebGL 非対応表示を追加。Roblox アカウント、Robux、マルチプレイ同期、クラウド保存は移行しておらず、完全互換ランタイムではありません。
起動と検証
新しい ball-game-h5 に展開し、ルートに package.json を置きます。level.js、avatar.js、environment.js、camera.js、main.js、SOURCE-MAPPING.md、reference/ の元 Lua を含みます。
npm ci
npm run devhttp://127.0.0.1:5174/ を開きます。記録ではデスクトップの Move to Combos/ball-game-h5 を使用。自分のパスに置き換えます。開始後 5 秒で球が出現。WASD / 矢印で移動、スペースでジャンプ、ドラッグで回転、ホイールでズーム、P でポーズ、R でリプレイ、F で全画面。「人物を見る」はゲームを止め、戻ると再開します。

ローカルの三人称視点でピンクの球を物理的に押す。
初期視点で壁を右、左、右と避け、最後のくぼみに入れます。WinPiece への接触で金色になり Winner を表示。記録ではキーボードと物理操作で完全クリアし、着地、ポーズ、リプレイ、カメラ、人物表示を確認しました。

ローカルでクリア後、金色の球と Winner を表示。
ビルドと公開
dev を止め、完成品を http://127.0.0.1:4174/ で確認します。
npm run build
npm run previewソースには cover.png があります。自分のゲームを作成し、以後は自分の紐付けで更新。ローカルサーバー停止後も公開 URL を再検証します。記録された人物・シーン更新は revision 2、公開済み、submission_is_current=true。Ball Game H5 、Canvas コード 70261。公開版でキーボードによるクリアを確認。モバイルボタンはビューポートのみで、実機は未検証です。

ローカルサーバー停止後、Combos で動く更新版 Ball Game H5。
出典:Combos 開発者向け導入ガイド 。原文の確認日:2026-10-08、CLI v1.14.2。検証結果は原文に記録された実行時のものです。