Skip to Content
DocumentationExemples complets

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.

ExempleCe qu’il montre
H5 · Star SprintVersions HTML/JS et Vite du même jeu
Unity · BoatAttackWebGL natif avec code et assets d’origine
Roblox · Ball GamePersonnage, 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/dist
npm ci npm run dev

Ouvrez 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.

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 preview

Vé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.

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.patch

Ne 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.

Menu original de BoatAttack dans l’éditeur Unity.

Réglages solo : choisir Island, puis configurer le bateau.

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 dist

Ouvrez 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.

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.

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

GetWinner d’origine détecte le contact balle–WinPiece.

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 end

Correspondance avec H5

OriginalNavigateur
CreateBall : wait(5), Part, Neonmain.js : délai, maillage et corps rigide dynamique
GetWinner : Touched, PlayerWonmain.js : victoire unique, balle dorée, Winner
Map1, WinPiece, apparitionlevel.js + main.js : disposition, géométrie, collisions, barrières invisibles incluses
Herbe, briques, métal, terre, cielenvironment.js : matériaux et textures locales
R15 Man, Pal Hair, haut, jeanavatar.js : 15 segments, cheveux, sourire, vêtements et semelles blanches
Humanoid/caméramain.js, avatar.js, camera.js : mouvement, saut, animation, suivi, orbite, zoom
Message / HintHUD 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.

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

Vue latérale des cheveux, segments du corps et chaussures.

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.

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 dev

Ouvrez 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.

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.

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 preview

Les 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é.

Ball Game H5 mis à jour sur Combos, serveur local arrêté.


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.

Last updated on