资产打包与 CI
手动构建每个平台的产物容易出错。用 CI 自动化可以保证每次发布都是一致的、可复现的。
资产嵌入
Bevy 的资产默认从文件系统加载。发布时需要确保资产文件和可执行文件一起分发。
方案一:相对路径
将资产文件夹放在可执行文件旁边:
my_game/
├── my_game.exe
└── assets/
├── sprites/
└── audio/AssetServer::load("sprites/player.png") 会从 assets/ 目录加载。
方案二:嵌入二进制
用 include_bytes! 将资产编译进二进制,适合小型项目或 WASM:
rust
let data = include_bytes!("../assets/icon.png");缺点是每次修改资产都需要重新编译。
方案三:自定义 AssetReader
实现 AssetReader trait,从 ZIP 包、HTTP 服务器或其他来源加载资产。这是最灵活的方案。
GitHub Actions
一个典型的多平台构建 workflow:
yaml
name: Build
on:
push:
tags: ['v*']
jobs:
build:
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
- os: windows-latest
target: x86_64-pc-windows-msvc
- os: macos-latest
target: aarch64-apple-darwin
- os: ubuntu-latest
target: wasm32-unknown-unknown
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- run: cargo build --release --target ${{ matrix.target }}
- uses: actions/upload-artifact@v4
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/itch.io 部署
itch.io 是独立游戏的主要发布平台之一。用 butler CLI 部署:
console
butler push ./build/html my-user/my-game:html5
butler push ./build/windows my-user/my-game:windows
butler push ./build/linux my-user/my-game:linux
butler push ./build/macos my-user/my-game:macbutler 会自动计算增量差异,上传速度快。
版本号管理
在 Cargo.toml 中统一管理版本号:
toml
[package]
version = "0.1.0"发布时用 cargo release 或手动 bump 版本号,然后 git tag。CI 通过 tag 触发构建。
检查清单
发布前的最后检查:
- [ ]
cargo clippy --release无警告 - [ ] Release 构建启用了 LTO 和 strip
- [ ] 资产路径在目标平台上正确
- [ ] 窗口标题、图标已替换
- [ ] 控制台输出已清理(不要留
println!调试信息) - [ ] 在目标平台上实际运行过