À propos du projet
# Un modèle de jeu Bevy
Modèle pour un jeu utilisant l'excellent [moteur Bevy][bevy] avec des builds prêts à l'emploi pour Windows, Linux, macOS, Web (Wasm), Android et iOS.
# Que vous apporte ce modèle ?
* un petit exemple de ["jeu"](https://niklasei.github.io/bevy_game_template/)
* une configuration facile pour exécuter le build web avec [trunk] (`trunk serve`)
* exécutez la version native avec `cargo run`
* un workflow pour GitHub actions créant des versions pour Windows, Linux, macOS et Web (Wasm) prêtes à la distribution
* le même workflow crée des builds de développement pour les plateformes mobiles (deux workflows séparés peuvent publier sur les stores après [une certaine configuration](#deploy-mobile-platforms))
* poussez un tag au format `v[0-9]+.[0-9]+.[0-9]+*` (par exemple `v1.1.42`) pour déclencher le flux
* un workflow CI qui vérifie votre application sur toutes les plateformes natives à chaque push
ATTENTION : si vous travaillez dans un dépôt privé, sachez que les runners macOS et Windows coûtent plus de minutes de build.
**Pour les dépôts publics, les runners de workflow sont gratuits !**
# Comment utiliser ce modèle ?
1. Cliquez sur « Use this template » sur la page du dépôt
2. Recherchez `ToDo` pour utiliser votre propre nom de jeu partout
3. [Mettez à jour les icônes comme décrit ci-dessous](#updating-the-icons)
4. Commencez à coder :tada:
* Démarrer l'application native : `cargo run`
* Démarrer le build web : `trunk serve`
* nécessite [trunk] : `cargo install --locked trunk`
* nécessite la cible `wasm32-unknown-unknown` : `rustup target add wasm32-unknown-unknown`
* cela servira votre application sur `8080` et la reconstruira + rechargera automatiquement après les modifications de code
* Démarrer l'application android : `cargo apk run -p mobile`
* nécessite de suivre les instructions du [readme de l'exemple bevy pour la configuration android][android-instructions]
* Démarrer l'application iOS (voir les [instructions de configuration ios du readme de l'exemple bevy][ios-instructions])
* Installez Xcode via l'app store
* Lancez Xcode et installez le simulateur iOS (cochez la case au premier démarrage, ou installez-le plus tard via `Preferences > Platforms`)
* Installez les cibles Rust iOS et simulateur iOS avec `rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim`
* exécutez `make run` dans le répertoire `/mobile`
Vous devez maintenir le répertoire `credits` à jour. Le workflow de release inclut automatiquement le répertoire dans chaque build.
### Mise à jour des icônes
1. Remplacez `build/macos/icon_1024x1024.png` par une icône png de `1024` fois `1024` pixels et exécutez `create_icns.sh` ou `create_icns_linux.sh` si vous utilisez linux (assurez-vous d'exécuter le script dans le répertoire `build/macos`) - _Note : `create_icns.sh` nécessite un mac, et `create_icns_linux.sh` nécessite imagemagick et png2icns_
2. Remplacez `build/windows/icon.ico` (utilisé pour l'exécutable windows et comme favicon pour les builds web)
* Vous pouvez créer un fichier `.ico` pour windows en suivant ces étapes :
1. Ouvrez `macos/AppIcon.iconset/icon_256x256.png` dans [Gimp](https://www.gimp.org/downloads/)
2. Sélectionnez l'élément de menu `File > Export As`.
3. Changez l'extension du fichier en `.ico` (ou cliquez sur `Select File Type (By Extension)` et sélectionnez `Microsoft Windows Icon`)
4. Enregistrez sous `build/windows/icon.ico`
3. Remplacez `build/android/res/mipmap-mdpi/icon.png` par `macos/AppIcon.iconset/icon_256x256.png`, mais renommez-le en `icon.png`
### Déployer le build web sur GitHub pages
1. Déclenchez le workflow `deploy-github-page`
2. Activez [GitHub pages](https://pages.github.com/) pour votre dépôt
1. Source depuis la branche `gh-pages` (créée par l'action qui vient d'être exécutée)
3. Après quelques minutes, votre jeu est en ligne à `http://username.github.io/repository`
Pour déployer des versions plus récentes, exécutez simplement à nouveau le workflow `deploy-github-page`.
# Déployer les plateformes mobiles
Pour des informations générales sur le support mobile, vous pouvez consulter [l'un de mes articles de blog sur le développement mobile avec Bevy][mobile_dev_with_bevy_2] qui est pertinent pour la configuration actuelle.
## Android
Actuellement, `cargo-apk` est utilisé pour exécuter l'application de développement. Mais les APK ne peuvent plus être publiés dans le store et `cargo-apk` ne peut pas produire l'AAB requis. C'est pourquoi il existe une configuration pour deux outils liés à android. Dans [`mobile/Cargo.toml`](./mobile/Cargo.toml), la section `package.metadata.android` configure `cargo-apk` tandis que [`mobile/manifest.yaml`](./mobile/manifest.yaml) configure un fork personnalisé de `xbuild` qui est utilisé dans le workflow `release-android-google-play` pour créer un AAB.
Il y a un [article sur la façon de configurer le workflow de release android][workflow_bevy_android] sur mon blog.
## iOS
La configuration est à peu près ce que Bevy fait pour l'exemple mobile.
Il y a un [article sur la façon de configurer le workflow de release iOS][workflow_bevy_ios] sur mon blog.
# Supprimer les plateformes mobiles
Si vous ne voulez pas cibler Android ou iOS, vous pouvez simplement supprimer les répertoires `/mobile`, `/build/android` et `/build/ios`.
Ensuite, supprimez la section `[workspace]` de `Cargo.toml`.
# Environnements de développement
## Support Nix
nixgl n'est utilisé que sur les systèmes Linux non-NixOS ;
lors de l'exécution là-bas, nous devons utiliser le flag `--impure` :
```
nix develop --impure
```
Si vous utilisez nixgl, alors par exemple `gl cargo run`, sinon utilisez
`cargo` comme d'habitude.
# Débuter avec Bevy
Vous devriez consulter le site web de Bevy pour [des liens vers des ressources][bevy-learn] et le [Bevy Cheat Book] pour un tas de documentation et d'exemples utiles. Je peux aussi recommander le [serveur Discord officiel de Bevy][bevy-discord] pour rester à jour avec le développement et obtenir de l'aide d'autres utilisateurs de Bevy.
# Problèmes connus
L'audio dans les builds web peut poser problème dans certains navigateurs. Cela semble être un problème de performance général et non dû à l'audio lui-même (voir [bevy_kira_audio/#9][firefox-sound-issue]).
# Licence
Ce projet est sous licence [CC0 1.0 Universal](LICENSE) sauf certains contenus de `assets` et les icônes Bevy dans le répertoire `build` (voir [Credits](credits/CREDITS.md)). Laissez libre cours à votre créativité et n'hésitez pas à me montrer ce que vous construisez avec ceci ([@nikl_me][nikl-twitter] / [@nikl_me@mastodon.online][nikl-mastodon] ).
[bevy]: https://bevyengine.org/
[bevy-learn]: https://bevyengine.org/learn/
[bevy-discord]: https://discord.gg/bevy
[nikl-twitter]: https://twitter.com/nikl_me
[nikl-mastodon]: https://mastodon.online/@nikl_me
[firefox-sound-issue]: https://github.com/NiklasEi/bevy_kira_audio/issues/9
[Bevy Cheat Book]: https://bevy-cheatbook.github.io/introduction.html
[trunk]: https://github.com/trunk-rs/trunk
[android-instructions]: https://github.com/bevyengine/bevy/blob/latest/examples/README.md#setup
[ios-instructions]: https://github.com/bevyengine/bevy/blob/latest/examples/README.md#setup-1
[mobile_dev_with_bevy_2]: https://www.nikl.me/blog/2023/notes_on_mobile_development_with_bevy_2/
[workflow_bevy_android]: https://www.nikl.me/blog/2023/github_workflow_to_publish_android_app/
[workflow_bevy_ios]: https://www.nikl.me/blog/2023/github_workflow_to_publish_ios_app/
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.