Об этом проекте
# Шаблон игры на 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/
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.