Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

549 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MyBevy

MyBevy 是一个基于 Rust 和 Bevy 的游戏项目仓库。仓库根目录用于协作文档、脚本和平台工程,实际游戏工程位于 project/

当前工程使用 Rust stable、bevy = "0.18.1",同一套 Bevy 代码支持桌面开发运行,并通过 android/ Gradle 壳工程打包 Android APK。

当前能力

  • Bevy 游戏工程:桌面入口在 project/src/main.rs,共享 App 入口在 project/src/lib.rs
  • Touch Ripple:单界面触控/鼠标互动玩法,通过 authority 帧同步回放 ui_touch 输入,支持按下圆形反馈、拖动水波纹拖尾和松开淡出。
  • Robot Sync:arena.robot_sync 3D 场景,用于验证机器人移动的 authority 帧同步、坐标映射、双客户端一致性和 HUD 诊断。
  • 场景框架:project/src/framework/scene/ 提供场景命令、事件、生命周期、首包 RON manifest、Loading、根实体、相机、spawn/anchor、trigger、streaming 元数据和 debug 配置。
  • UI 框架:project/src/framework/ui/ 提供页面模式、面板层级、输入路由、焦点、通用控件、覆盖层、主题和国际化。
  • 音频框架:project/src/framework/audio/ 提供音频 catalog、cue、group、bus、scope、音乐、空间音频、场景音频 adapter、lazy bank 和调试快照。
  • 网络框架:project/src/framework/network/ 提供 HTTP、TCP 和 KCP 的 Bevy 消息接口。
  • Authority 会话:project/src/game/authority/ 提供本地控制机、局域网控制机和远端 MyServer 控制机的统一命令/事件接口。
  • Android 打包:android/ 会加载 Rust 产出的 libproject.so,并把 project/assets 打包进 APK assets。

目录结构

mybevy/
|-- android/                 # Android Gradle 壳工程
|-- docs/                    # 项目文档
|   |-- audio/               # 音频框架说明
|   |-- gameplay/            # 玩法系统设计
|   |-- scene/               # 场景框架说明
|   |-- ui/                  # UI 框架说明
|   `-- 世界观/              # 世界观和长期玩法设定
|-- project/                 # Rust / Bevy 游戏工程根目录
|   |-- assets/              # 首包资源
|   |-- src/
|   |   |-- framework/       # UI、audio、network、scene、fight 等横向能力
|   |   |-- game/            # 游戏层插件、页面、玩法、场景和协议适配
|   |   |-- lib.rs           # 共享 Bevy App 入口
|   |   `-- main.rs          # 桌面入口
|   `-- Cargo.toml
|-- scripts/                 # 仓库级开发脚本
|-- summary/                 # 开发中 checklist,完成后归档到 docs
|-- CLAUDE.md                # 协作和开发约定
`-- README.md

环境准备

基础开发需要:

  • Rust stable
  • Git LFS
  • Windows PowerShell

首次克隆或换新机器开发时建议执行:

git lfs install
rustc --version
cargo --version

当前 project/Cargo.toml 依赖本地 MyServer 仓库中的 ../../MyServer/packages/authority-core。如果编译时报找不到该路径,需要先确认同级 MyServer 仓库存在,或按你的本地环境调整依赖路径。

Android 打包还需要:

  • Android SDK / NDK
  • cargo-ndk
  • JDK 17 或更新版本

快速启动

所有 Rust 和 Bevy 命令默认在 project/ 目录执行:

Set-Location project
cargo run

仓库根 .cargo/config.toml 会让游戏工程和独立工具共享根 target/ 构建缓存,因此从 project/ 执行游戏命令时二进制仍输出到 target/debug/。通常不要设置 CARGO_TARGET_DIR;脚本或 CI 必须显式设置时,只能将它指向仓库根 target/,避免重新产生清单本地缓存。

共享构建缓存维护

共享缓存的三个 Cargo 根仍各自保留 Cargo.tomlCargo.lock,但在当前根 .cargo/config.toml 配置下,从其中任一目录执行 cargo clean 都会清除仓库根 target/,从而影响其他两个根的后续构建。不要把 cargo clean 当作单个工具的局部操作。

运行中的游戏客户端、cargo/rustc、UI 生成或视觉审计工具、测试,以及 Android 的 Gradle/Java/ADB 进程都可能使用共享缓存。停止这些进程后,先执行默认预演,再在人工确认后清理:

pwsh -File scripts/clear-shared-cargo-target.ps1
pwsh -File scripts/clear-shared-cargo-target.ps1 -IncrementalOnly
pwsh -File scripts/clear-shared-cargo-target.ps1 -IncrementalOnly -Execute -ConfirmSharedTargetCleanup
pwsh -File scripts/clear-shared-cargo-target.ps1 -Execute -ConfirmSharedTargetCleanup

前两条命令不会删除文件;-IncrementalOnly 只针对 target/debug/incremental。建议仅在根 target/ 超过 35 GiB、磁盘空间紧张,或完成一个发布/大型分支后进行人工检查,优先清理由本脚本控制的 stale incremental 缓存。不要在每次构建前自动清理完整缓存,否则会失去依赖复用并延长构建时间。

共享目录上的 Blocking waiting for file lock 通常表示另一个 Cargo 正在正常排队。先观察对应 Cargo 命令是否仍有 CPU、磁盘或编译日志进展;若没有进展,使用任务管理器或 Get-CimInstance Win32_Process 查找遗留的 cargorustclink、游戏或 UI 工具进程并让其正常退出。只有在相关进程均已结束、等待持续且无任何产物或日志变化时,才把它按可能死锁处理;先保留终端输出和进程信息,再重新启动构建,不要直接删除共享缓存。

回滚共享缓存配置时,不需要修改 Rust 源码、任何 Cargo.lock,或 UI 工具与正式包的依赖方向:移除根 .cargo/config.toml,恢复 .gitignore、脚本和当前文档中的原本地 target/ 路径约定,确认旧路径不再被当成共享缓存后删除根 target/,再分别在 project/tools/ui-generation/tools/ui-visual-audit/ 运行各自的构建或测试命令以重建本地缓存。

格式化和检查:

Set-Location project
cargo fmt
cargo check

只改文档时,至少确认 diff 没有空白问题:

git diff --check

桌面窗口 Profile

桌面端可以用窗口 profile 模拟移动设备分辨率:

Set-Location project
cargo run -- --window-profile phone-landscape
cargo run -- --window-profile phone-1080p-landscape
cargo run -- --window-profile tablet-landscape
cargo run -- --window-size 1600x720
cargo run -- --window-profile phone-landscape --window-scale 50%

这些参数只影响桌面开发窗口。Android 真机 Activity 固定为横屏;旧竖屏 profile 仍保留给历史兼容性回归。

常用开发入口

直接启动样板场景:

Set-Location project
$env:MYBEVY_START_SCENE="sample.dungeon_room"
cargo run

直接启动 Robot Sync 场景:

Set-Location project
$env:MYBEVY_START_SCENE="arena.robot_sync"
cargo run -- --window-profile phone-landscape --window-scale 50%

Robot Sync 手动输入模式:

Set-Location project
$env:MYBEVY_START_SCENE="arena.robot_sync"
$env:ROBOT_SYNC_INPUT_MODE="manual"
cargo run -- --window-profile phone-landscape --window-scale 50%

音频监控和音频测试页:

Set-Location project
$env:TOUCH_START_SCREEN="audio_monitor"
cargo run

$env:TOUCH_START_SCREEN="audio_gallery"
cargo run

一键启动两个 Touch Ripple 客户端:

.\scripts\start-two-clients.ps1

一键启动两个 Robot Sync 客户端:

.\scripts\start-robot-sync-two-clients.ps1 -DryRun -SkipBuild
.\scripts\start-robot-sync-two-clients.ps1 -Mode lan -SkipBuild

Android 构建

安装 Android target 和 cargo-ndk

rustup target add aarch64-linux-android
cargo install cargo-ndk

构建 Rust 动态库:

Set-Location project
cargo ndk -t arm64-v8a -P 26 -o ..\android\app\src\main\jniLibs rustc --release --lib --crate-type cdylib

打包 Debug APK:

Set-Location ..\android
.\gradlew.bat assembleDebug

如果 JAVA_HOME 指向 JDK 8,先在当前终端切到 JDK 17 或更新版本:

$env:JAVA_HOME="C:\Program Files\Java\jdk-21"

Debug APK 通常输出到:

android/app/build/outputs/apk/debug/app-debug.apk

资源约定

首包资源统一放在 project/assets/。代码中引用资源时,从 project/assets/ 下一级开始写:

ui/fonts/MyBevyUiCjk-Regular.otf
audio/ui/click_wood_01.wav
scenes/sample_dungeon_room/scene.ron

不要写成:

project/assets/ui/fonts/MyBevyUiCjk-Regular.otf

图片、字体、音频、二进制模型和源工程类资源通过 Git LFS 提交;RON、JSON、TXT、授权说明等文本资源保持普通 Git 提交。

后续下载资源不要放入 project/assets/。相关设计见 docs/assets-workflow.md

文档索引

开发约定

  • 新增游戏功能优先放入 project/src/ 下的模块,不持续堆在 main.rs
  • UI 页面结构放在 project/src/game/screens/
  • 具体玩法放在 project/src/game/features/
  • 具体游戏场景注册和适配放在 project/src/game/scenes/
  • UI 框架能力放在 project/src/framework/ui/
  • UI 通用控件放在 project/src/framework/ui/widgets/
  • 颜色、字号、间距、圆角等主题参数集中放在 project/src/framework/ui/style/theme.rs
  • 修改项目结构、初始化方式、Bevy 版本、资源目录约定或新成员上手流程时,同步检查相关文档。

提交前检查

涉及 Rust 代码时至少执行:

Set-Location project
cargo fmt
cargo check

只涉及文档或资源时,至少确认变更路径和内容正确:

git status --short
git diff --check

提交信息建议使用:

<type>(<scope>): <summary>

示例:

docs: add project overview readme
feat(scene): add robot sync arena entry
fix(ui): correct lobby route button state

About

基于 Rust + Bevy 的跨平台游戏客户端,内置 UI、场景、音频、网络和 authority 帧同步框架,支持桌面/Android 与 MyServer 联调。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages