À 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/