Exemples complets
Ces trois projets proposent explications, captures, téléchargements et résultats documentés. Les sources servent à poursuivre le développement ; les archives dist, à exécuter ou publier. Créez votre propre jeu : elles ne contiennent ni identifiants ni association au Post de l’auteur.
| Exemple | Ce qu’il montre |
|---|---|
| H5 · Star Sprint | Versions HTML/JS et Vite du même jeu |
| Unity · BoatAttack | WebGL natif avec code et assets d’origine |
| Roblox · Ball Game | Personnage, scène et règles réimplémentés pour le Web |
Chemins, patches, coordonnées et versions sont propres à chaque projet. Les essais datent du 2026-10-08 ; une vérification de viewport mobile ne vaut pas un test sur téléphone réel.
Exemple H5 · Star Sprint
Collectez 5 étoiles en 45 secondes, évitez 2 robots et commencez avec 3 points de vie. WASD/flèches pour bouger, P pour la pause, R pour recommencer. Le viewport mobile affiche des boutons directionnels. Les sources incluent HTML/JS et Vite.
Télécharger et lancer
Extrayez dans un nouveau dossier native-h5, avec package.json à la racine. Placez-y le terminal et choisissez un parcours :
python3 -m http.server 8000 --bind 127.0.0.1 --directory plain/distnpm ci
npm run devOuvrez http://127.0.0.1:8000/ pour la version simple ou http://127.0.0.1:5173/ pour Vite. Le dossier de l’essai était Move to Combos/native-h5 sur le Bureau ; utilisez votre chemin réel.

Star Sprint en local : démarrage, déplacement, collecte et score.
Tester et publier
Lancez, collectez une étoile et vérifiez le score ; les 5 donnent la victoire. Testez dégâts, temps écoulé, pause et nouvelle partie. Pour Vite, arrêtez dev puis :
npm run build
npm run previewVérifiez http://127.0.0.1:4173/ ; la version simple utilise plain/dist. Publiez en gardant votre combos.json.
La version documentée utilisait Vite, pc,mobile, révision 1. Jouer à Star Sprint , code Canvas 07752. Des victoires complètes au clavier ont été obtenues en local et en ligne. Les commandes mobiles ont seulement été contrôlées dans un viewport, sans téléphone réel.

Première étoile collectée sur la page publique Combos.
Sources et téléchargements
index.html/src/style.css : Canvas, HUD, boutons, disposition, tactile. src/main.js : entrées, déplacement, collecte, collisions, temps, résultat, dessin. package.json/vite.config.js : scripts et URL relatives. plain/dist : version équivalente sans build.
Cet extrait explique le score ; il ne s’agit pas d’un code d’intégration Combos obligatoire :
if (!star.collected && Math.hypot(
star.x - state.player.x, star.y - state.player.y
) < 35) {
star.collected = true;
state.score++;
}
if (state.health <= 0 || state.elapsed >= 45) show('lost');
else if (state.score === 5) show('won');Les deux ZIP prêts à jouer contiennent index.html à la racine après extraction.
Exemple Unity · BoatAttack
Cet exemple utilise le BoatAttack officiel au commit 91886a3ef1ac963aa10578fcaf1d59e9b6961ab3. La base utilisait 6000.2.0b8 ; l’adaptation vise Unity 6.3 LTS 6000.3.25f1, Apple Silicon ARM64. Bateaux, pilotes, Island, eau, physique, IA et C# sont conservés.
Obtenir et adapter
Installez Git LFS, clonez dans un dossier neuf et récupérez les gros assets. Extrayez l’archive d’adaptation à la racine avant les deux commandes git apply. N’appliquez le patch qu’une fois.
git clone https://github.com/Unity-Technologies/BoatAttack.git BoatAttack
cd BoatAttack
git checkout 91886a3ef1ac963aa10578fcaf1d59e9b6961ab3
git lfs pull
git lfs fsck
git apply --check tracked-project-changes.patch
git apply tracked-project-changes.patchNe le réappliquez pas à un projet déjà adapté. L’archive contient compatibilité, versions, documentation et licences, mais ni gros assets originaux, ni Library, ni dist, ni plugin Combos. Pour votre jeu, suivez le guide Unity.
Exporter et lancer une course
Ouvrez main_menu.unity, testez menu et paramètres solo en Play, puis arrêtez. Scènes : main_menu.unity (0) et level_Island.unity (1). Utilisez Default, Gzip + fallback et Addressables au Player Build. Exportez dans dist.

Menu original de BoatAttack dans l’éditeur Unity.

Réglages solo : choisir Island, puis configurer le bateau.
Build documenté : 18:21:57–18:26:03, 246 secondes, 27 fichiers, 5 bundles Addressables, 127,36 MiB au total, maximum 94,58 MiB, ZIP 124,88 MiB. Les limites étaient respectées ; index.html était à la racine.
python3 -m http.server 8001 --bind 127.0.0.1 --directory distOuvrez http://127.0.0.1:8001/. Suivez RACE → SINGLEPLAYER → ISLAND (1 tour) → NEXT → configuration du bateau → RACE. Attendez l’introduction et le compte à rebours, puis cliquez sur le canvas. W/↑/espace accélère, A/D tourne, R réinitialise et F met en pause/reprend.
Publier et vérifier
Créez cover.png avec une vraie capture de course. Utilisez --platform pc --screen-orientation landscape ; update seulement si votre association existe déjà. Pour un gros import, --timeout 10m est possible.
L’essai a mis à jour le même Post en révision 2, publiée avec submission_is_current=true. Jouer à BoatAttack , code 08759. Serveurs locaux arrêtés, deux sessions indépendantes ont lancé la course via la page publique/le lien, testé accélération, direction, pause/reprise et R dans une session, son coupé. Les fichiers principaux et les 5 bundles venaient du déploiement public, sans erreur de jeu observée.

Course sur Combos avec l’export Default natif.
Périmètre : chargement et pilotage solo sur PC en paysage. Une victoire complète, le tactile et les téléphones réels n’ont pas été vérifiés. Des avertissements loader/moteur restent présents ; le 401 du profil non connecté sur la page extérieure est suivi séparément.
Modifications apportées
Code, assets et branche WebGL existante de l’eau sont conservés. Unity génère la page Default sans réécriture du loader. Scènes, compression et Addressables sont réglés dans l’interface native. Le patch adapte éditeur/Input System/URP et sérialisation. UIPanelFade.shader reçoit _MainTex, nécessaire au nouvel uGUI :
[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}Les anciens scripts Editor personnalisés, modèles Combos et com.unity.pipeline ont été retirés. Le patch touche 31 fichiers suivis par rapport au commit fixé, dont README-migration.md, WEBGL-MIGRATION.md, LOCAL_SETUP.md et les licences. Il reproduit ce projet, pas une migration Unity universelle.
Télécharger l’adaptation BoatAttack.
Exemple Roblox · Ball Game
Basé sur Ball game open source , fourni en ball game.rbxl. Les règles restent : attendre 5 secondes, pousser la balle rose entre trois murs décalés, toucher WinPiece, rendre la balle dorée et afficher Winner.
Examiner l’original
Ouvrez et jouez dans Roblox Studio, puis arrêtez et inspectez scripts, avatar, scène et propriétés sans modifier le .rbxl.

Personnage, herbe, murs, socle gris et arrivée d’origine.

GetWinner d’origine détecte le contact balle–WinPiece.
Deux scripts gèrent apparition et victoire ; Roblox fournit rendu, personnage, entrées, caméra, animation, physique et environnement serveur. Balle : 5×5×5 studs ; herbe : 18×1×74 ; centres des murs : (22,17.5,34), (32,17.5,15), (21.5,17.5,-4). Ces valeurs sont propres à cet exemple.
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)Pour une scène Part simple, cet extrait en lecture seule affiche les propriétés dans Output depuis Command Bar, Play arrêté. Maillages complexes, textures et squelettes demandent un traitement distinct. Il n’exporte pas un jeu H5 jouable.
for _, part in ipairs(workspace:GetDescendants()) do
if part:IsA("BasePart") then
print(part:GetFullName(), part.Position, part.Size,
part.Material, part.Transparency)
end
endCorrespondance avec H5
| Original | Navigateur |
|---|---|
CreateBall : wait(5), Part, Neon | main.js : délai, maillage et corps rigide dynamique |
| GetWinner : Touched, PlayerWon | main.js : victoire unique, balle dorée, Winner |
| Map1, WinPiece, apparition | level.js + main.js : disposition, géométrie, collisions, barrières invisibles incluses |
| Herbe, briques, métal, terre, ciel | environment.js : matériaux et textures locales |
| R15 Man, Pal Hair, haut, jean | avatar.js : 15 segments, cheveux, sourire, vêtements et semelles blanches |
| Humanoid/caméra | main.js, avatar.js, camera.js : mouvement, saut, animation, suivi, orbite, zoom |
| Message / Hint | HUD HTML/CSS, écrans de départ, pause et victoire |
L’original charge l’avatar du compte à l’exécution. Cette version reconstruit son apparence avec géométrie et textures locales, sans importer les maillages officiels Roblox. Les Parts suivent la disposition réelle ; d’autres projets peuvent réutiliser des modèles/textures autorisés à l’export.

Avatar de face : cheveux, sourire, haut bleu-noir, pantalon sombre et semelles blanches.

Vue latérale des cheveux, segments du corps et chaussures.
Convention : 1 stud = 0,3 m, origine (27,15,15), rayon 0,75 m. Conversion, masse, friction, amortissement du roulement et vitesse maximale doivent être réglés pour votre jeu.

Niveau reconstruit avec trois obstacles, limites et arrivée.
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');
});Ajouts Web : déplacement/saut tactiles, pause/reprise, nouvelle partie, plein écran, inspection de l’avatar et message WebGL indisponible. Comptes Roblox, Robux, synchronisation multijoueur et sauvegardes cloud ne sont pas migrés. Ce n’est pas un runtime Roblox complet.
Lancer et vérifier
Extrayez dans ball-game-h5 avec package.json à la racine. Sont inclus level.js, avatar.js, environment.js, camera.js, main.js, SOURCE-MAPPING.md et les Lua d’origine dans reference/.
npm ci
npm run devOuvrez http://127.0.0.1:5174/. L’essai utilisait Move to Combos/ball-game-h5 sur le Bureau ; adaptez le chemin. Après le départ, attendez 5 secondes. WASD/flèches déplacent, espace saute, glisser fait tourner la caméra, molette zoome, P met en pause, R recommence, F passe en plein écran. L’inspection de l’avatar fige la manche ; revenir la reprend.

Vue locale à la troisième personne : pousser physiquement la balle rose.
Depuis la caméra initiale, contournez les murs à droite, à gauche, à droite, puis entrez dans le renfoncement final. Le contact avec WinPiece rend la balle dorée et affiche Winner. Le test local a obtenu une victoire au clavier/physique et vérifié réception des sauts, pause, nouvelle partie, caméra et inspection.

Victoire locale complète : balle dorée et Winner.
Générer et publier
Arrêtez dev et vérifiez la sortie finale sur http://127.0.0.1:4174/ :
npm run build
npm run previewLes sources incluent cover.png. Créez votre jeu, gardez l’association pour les mises à jour et retestez le lien public sans serveur local. La mise à jour personnage/scène documentée est la révision 2, publiée avec submission_is_current=true. Jouer à Ball Game H5 , code 70261. Une victoire en ligne au clavier a été obtenue ; les boutons mobiles ont seulement été contrôlés en viewport, sans téléphone réel.

Ball Game H5 mis à jour sur Combos, serveur local arrêté.
- Sources H5 complètes, références Lua et correspondances
- Version prête avec index.html à la racine extraite
Source : Guide d’intégration Combos , vérifié le 2026-10-08 avec CLI v1.14.2. Les résultats correspondent aux essais consignés dans le guide original.