# Build Unity, WebGL et versioning client

## Build WebGL

Le build est défini dans `Assets/Src/Editor/Builder.cs`. Le menu Unity **Uniksim → Build WebGL** appelle `WebGLBuild()`, qui build `Assets/game.unity` vers le dossier `Build/`.

```mermaid
flowchart LR
CODE[Code + Prefabs + Resources] --> VER[version.txt / sub_version.txt]
VER --> MENU[Uniksim / Build WebGL]
MENU --> SCENE[Assets/game.unity]
SCENE --> BUILD[game/Build/Build/*]
BUILD --> DEPLOY[node.js/deploy/deployToCloud.bat]
DEPLOY --> SPACE[uniksim-data/version/*]
SPACE --> DB[constants table: active WebGL version]
DB --> WEB[Web app loads that version]

```

## Version du client

- `Assets/Resources/data/version.txt` : version principale utilisée pour le dossier de déploiement;
- `Assets/Resources/data/sub_version.txt` : sous-version utilisée hors live.

`Game.cs` et l'UI de profil lisent ces fichiers. `Assets/Src/Editor/AutoVersion.cs` contient un ancien incrément automatique, mais son code est commenté : **le build n'incrémente pas automatiquement `version.txt`**.

## Script de déploiement

Le déploiement du build WebGL est géré par :

- `node.js/deploy/deployToCloud.bat` — point d'entrée;
- `node.js/deploy/deployBuild.js` — script Node qui effectue l'upload.

`deployToCloud.bat` exécute `node deploybuild.js`. `deployBuild.js` lit automatiquement `../game/Assets/Resources/data/version.txt` puis upload les artefacts dans `uniksim-data` sous un dossier portant cette version.

### Fichiers uploadés

<table id="bkmrk-fichier-local-cl%C3%A9-di"><thead><tr><th>Fichier local</th><th>Clé distante</th></tr></thead><tbody><tr><td>`game/Build/Build/Build.data.unityweb`</td><td>`<version>/Build.data.unityweb`</td></tr><tr><td>`game/Build/Build/Build.wasm.unityweb`</td><td>`<version>/Build.wasm.unityweb`</td></tr><tr><td>`game/Build/Build/Build.framework.js.unityweb`</td><td>`<version>/Build.framework.js.unityweb`</td></tr><tr><td>`game/Build/Build/Build.loader.js`</td><td>`<version>/Build.loader.js`</td></tr></tbody></table>

**Important :** modifier `version.txt` *avant* le build et le déploiement. Le dossier distant est choisi à partir de cette valeur.

## Version active dans la base de données

Après le déploiement, mettre à jour la version WebGL active dans la table `constants` de la base `uniksim`, enregistrement `id = 1`. Le backend la lit dans `GameService.getVersion()`.

phpMyAdmin : `https://db.uniksim.com/phpmyadmin/index.php?db=uniksim&table=constants&target=sql.php`

<table id="bkmrk-instance-colonne-%C3%A0-m"><thead><tr><th>Instance</th><th>Colonne à modifier</th><th>Propriété backend</th></tr></thead><tbody><tr><td>`alpha`</td><td>`dev_version`</td><td>`devVersion`</td></tr><tr><td>`alpha2`</td><td>`dev2_version`</td><td>`dev2Version`</td></tr><tr><td>`demo`</td><td>`demo_version`</td><td>`demoVersion`</td></tr><tr><td>`demoLive`</td><td>`demoLive_version`</td><td>`demoLiveVersion`</td></tr><tr><td>production / `game`</td><td>`live_version`</td><td>`liveVersion`</td></tr></tbody></table>

La valeur en DB doit correspondre exactement au contenu de `version.txt` qui vient d'être déployé. Sinon le frontend tentera de charger un autre dossier WebGL.

## Quand rebuilder

<table id="bkmrk-changement-rebuild-u" style="width: 50%;"><thead><tr><th style="width: 64.446%;">Changement</th><th style="width: 35.554%;">Rebuild Unity ?</th></tr></thead><tbody><tr><td style="width: 64.446%;">C# Unity, scène, prefab, ScriptableObject</td><td style="width: 35.554%;">Oui</td></tr><tr><td style="width: 64.446%;">JSON dans Resources à embarquer</td><td style="width: 35.554%;">Oui</td></tr><tr><td style="width: 64.446%;">Cloud Script BrainCloud uniquement</td><td style="width: 35.554%;">Non</td></tr><tr><td style="width: 64.446%;">Texte publié dynamiquement sur le serveur</td><td style="width: 35.554%;">Pas nécessairement</td></tr></tbody></table>

## Procédure complète

1. Vérifier le diff Git et les assets/Resources sauvegardés.
2. Choisir le nouveau numéro et modifier `Assets/Resources/data/version.txt`. Vérifier `sub_version.txt` si nécessaire.
3. Lancer **Uniksim → Build WebGL**.
4. Confirmer zéro erreur dans le `BuildReport` et vérifier les quatre artefacts dans `game/Build/Build/`.
5. Depuis `node.js/deploy/`, lancer `deployToCloud.bat`.
6. Dans phpMyAdmin, table `uniksim.constants`, mettre à jour la colonne de l'environnement ciblé avec la même version.
7. Charger l'instance cible et confirmer que le nouveau build est utilisé.
8. Tester login, chargement de simulation, ouverture du jeu et une commande BrainCloud.

## Diagnostic rapide

<table id="bkmrk-sympt%C3%B4me-%C3%80-v%C3%A9rifier-"><thead><tr><th>Symptôme</th><th>À vérifier</th></tr></thead><tbody><tr><td>L'ancien build se charge</td><td>Colonne `*_version` de `constants`.</td></tr><tr><td>404 sur les fichiers Unity</td><td>Version DB vs dossier uploadé dans `uniksim-data`.</td></tr><tr><td>Mauvais dossier déployé</td><td>`version.txt` avant `deployToCloud.bat`.</td></tr><tr><td>Changement Cloud Script absent</td><td>Importer les Server Scripts BrainCloud; un rebuild Unity ne suffit pas.</td></tr></tbody></table>