Skip to content

资产打包与 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:mac

butler 会自动计算增量差异,上传速度快。

版本号管理

Cargo.toml 中统一管理版本号:

toml
[package]
version = "0.1.0"

发布时用 cargo release 或手动 bump 版本号,然后 git tag。CI 通过 tag 触发构建。

检查清单

发布前的最后检查:

  • [ ] cargo clippy --release 无警告
  • [ ] Release 构建启用了 LTO 和 strip
  • [ ] 资产路径在目标平台上正确
  • [ ] 窗口标题、图标已替换
  • [ ] 控制台输出已清理(不要留 println! 调试信息)
  • [ ] 在目标平台上实际运行过