Об этом проекте

# Шаблон игры на Bevy Шаблон для игры с использованием замечательного [движка Bevy][bevy], включающий готовые сборки для Windows, Linux, macOS, Web (Wasm), Android и iOS. # Что даёт этот шаблон? * небольшую примерную ["игру"](https://niklasei.github.io/bevy_game_template/) * простую настройку для запуска веб-сборки с помощью [trunk] (`trunk serve`) * запуск нативной версии через `cargo run` * workflow для GitHub Actions, создающий релизы для Windows, Linux, macOS и Web (Wasm), готовые к распространению * тот же workflow создаёт dev-сборки для мобильных платформ (два отдельных workflow могут публиковать в магазины после [некоторой настройки](#deploy-mobile-platforms)) * отправьте тег в формате `v[0-9]+.[0-9]+.[0-9]+*` (например, `v1.1.42`), чтобы запустить процесс * CI workflow, который проверяет ваше приложение на всех нативных платформах при каждом push ВНИМАНИЕ: если вы работаете в приватном репозитории, учтите, что раннеры macOS и Windows стоят больше минут сборки. **Для публичных репозиториев раннеры workflow бесплатны!** # Как использовать этот шаблон? 1. Нажмите "Use this template" на странице репозитория 2. Найдите `ToDo`, чтобы везде использовать своё название игры 3. [Обновите иконки, как описано ниже](#updating-the-icons) 4. Начинайте программировать :tada: * Запуск нативного приложения: `cargo run` * Запуск веб-сборки: `trunk serve` * требуется [trunk]: `cargo install --locked trunk` * требуется цель `wasm32-unknown-unknown`: `rustup target add wasm32-unknown-unknown` * это запустит ваше приложение на `8080` и автоматически пересоберёт и перезагрузит его после изменений в коде * Запуск Android-приложения: `cargo apk run -p mobile` * требует следования инструкциям в [readme примера bevy для настройки Android][android-instructions] * Запуск iOS-приложения (см. [инструкции по настройке iOS в readme примера bevy][ios-instructions]) * Установите Xcode через App Store * Запустите Xcode и установите симулятор iOS (поставьте галочку при первом запуске или установите позже через `Preferences > Platforms`) * Установите Rust-цели для iOS и симулятора iOS командой `rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim` * выполните `make run` внутри каталога `/mobile` Вам следует поддерживать каталог `credits` в актуальном состоянии. Workflow релиза автоматически включает этот каталог в каждую сборку. ### Обновление иконок 1. Замените `build/macos/icon_1024x1024.png` на png-иконку размером `1024` на `1024` пикселей и запустите `create_icns.sh` или `create_icns_linux.sh`, если вы используете Linux (обязательно запускайте скрипт внутри каталога `build/macos`) - _Примечание: `create_icns.sh` требует Mac, а `create_icns_linux.sh` требует imagemagick и png2icns_ 2. Замените `build/windows/icon.ico` (используется для исполняемого файла Windows и как favicon для веб-сборок) * Вы можете создать файл `.ico` для Windows, выполнив следующие шаги: 1. Откройте `macos/AppIcon.iconset/icon_256x256.png` в [Gimp](https://www.gimp.org/downloads/) 2. Выберите пункт меню `File > Export As`. 3. Измените расширение файла на `.ico` (или нажмите `Select File Type (By Extension)` и выберите `Microsoft Windows Icon`) 4. Сохраните как `build/windows/icon.ico` 3. Замените `build/android/res/mipmap-mdpi/icon.png` на `macos/AppIcon.iconset/icon_256x256.png`, но переименуйте его в `icon.png` ### Развёртывание веб-сборки на GitHub Pages 1. Запустите workflow `deploy-github-page` 2. Активируйте [GitHub Pages](https://pages.github.com/) для вашего репозитория 1. Источник — ветка `gh-pages` (созданная только что выполненным действием) 3. Через несколько минут ваша игра будет доступна по адресу `http://username.github.io/repository` Чтобы развернуть более новые версии, просто снова запустите workflow `deploy-github-page`. # Развёртывание мобильных платформ Общую информацию о поддержке мобильных платформ можно найти в [одном из моих постов в блоге о мобильной разработке с Bevy][mobile_dev_with_bevy_2], который относится к текущей настройке. ## Android В настоящее время для запуска dev-приложения используется `cargo-apk`. Но APK больше нельзя публиковать в магазине, и `cargo-apk` не может создать требуемый AAB. Поэтому есть настройка для двух связанных с Android инструментов. В [`mobile/Cargo.toml`](./mobile/Cargo.toml) секция `package.metadata.android` настраивает `cargo-apk`, а [`mobile/manifest.yaml`](./mobile/manifest.yaml) настраивает кастомный форк `xbuild`, который используется в workflow `release-android-google-play` для создания AAB. Есть [пост о том, как настроить workflow релиза для Android][workflow_bevy_android] в моём блоге. ## iOS Настройка практически такая же, какую Bevy использует для мобильного примера. Есть [пост о том, как настроить workflow релиза для iOS][workflow_bevy_ios] в моём блоге. # Удаление мобильных платформ Если вы не хотите ориентироваться на Android или iOS, просто удалите каталоги `/mobile`, `/build/android` и `/build/ios`. Затем удалите секцию `[workspace]` из `Cargo.toml`. # Среды разработки ## Поддержка Nix nixgl используется только в системах Linux, отличных от NixOS; при запуске там нам нужно использовать флаг `--impure`: ``` nix develop --impure ``` Если используется nixgl, то, например, `gl cargo run`, иначе используйте `cargo` как обычно. # Начало работы с Bevy Вам стоит заглянуть на сайт Bevy за [ссылками на ресурсы][bevy-learn] и в [Bevy Cheat Book] за множеством полезной документации и примеров. Также могу порекомендовать [официальный Discord-сервер Bevy][bevy-discord], чтобы быть в курсе разработки и получать помощь от других пользователей Bevy. # Известные проблемы Звук в веб-сборках может иметь проблемы в некоторых браузерах. Похоже, это общая проблема производительности, а не самого звука (см. [bevy_kira_audio/#9][firefox-sound-issue]). # Лицензия Этот проект лицензирован под [CC0 1.0 Universal](LICENSE), за исключением некоторого содержимого `assets` и иконок Bevy в каталоге `build` (см. [Credits](credits/CREDITS.md)). Творите свободно и не стесняйтесь показать мне, что вы с этим сделали ([@nikl_me][nikl-twitter] / [@[email protected]][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/