Bevy 移动端开发指南
Bevy 移动端开发指南
Bevy 确实支持 iOS 和 Android 平台开发,但需要特定的配置和工具链。本指南将详细介绍如何在移动平台上开发 Bevy 游戏。
支持状态
- ✅ iOS: 完全支持
- ✅ Android: 完全支持
- ⚠️ 注意:需要额外配置和工具链
环境准备
Android 开发环境
- 必需工具:
# 安装 Android SDK
rustup target add aarch64-linux-android armv7-linux-androideabi
# 安装 Android NDK
# 推荐使用 Android Studio 安装,或直接下载 NDK
# 安装 Cargo-apk
cargo install cargo-apk
- 环境变量配置:
export ANDROID_SDK_ROOT=/path/to/android-sdk
export NDK_HOME=/path/to/android-ndk
iOS 开发环境
- 必需工具:
# 安装 iOS 目标
rustup target add aarch64-apple-ios x86_64-apple-ios
# 安装 Xcode 命令行工具
xcode-select --install
# 安装 cargo-xcode
cargo install cargo-xcode
项目配置
Cargo.toml 配置
[package]
name = "my_bevy_game"
version = "0.1.0"
edition = "2021"
[dependencies]
bevy = "0.11.0"
[lib]
name = "my_bevy_game"
crate-type = ["staticlib", "cdylib"]
[package.metadata.android]
build_targets = ["aarch64-linux-android", "armv7-linux-androideabi"]
min_sdk_version = 16
target_sdk_version = 31
[package.metadata.ios]
bundle_id = "com.example.mybevygame"
Android 配置
- 创建 android 目录结构:
my_bevy_game/
├── android/
│ ├── app/
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── res/
│ │ │ └── java/
│ │ └── build.gradle
│ └── build.gradle
└── src/
- AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mybevygame">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.NoActionBar">
<activity
android:name="android.app.NativeActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="true">
<meta-data
android:name="android.app.lib_name"
android:value="my_bevy_game" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
iOS 配置
- 创建 iOS 项目结构:
my_bevy_game/
├── ios/
│ ├── src/
│ │ └── lib.rs
│ ├── Info.plist
│ └── Assets.xcassets/
└── src/
- Info.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>my_bevy_game</string>
<key>CFBundleIdentifier</key>
<string>com.example.mybevygame</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>My Bevy Game</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>Launch Screen</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>arm64</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>
构建和运行
Android 构建
# 构建 APK
cargo apk build --release
# 安装到设备
cargo apk run --release
iOS 构建
# 生成 Xcode 项目
cargo xcode
# 使用 Xcode 打开项目并运行
open ios/my_bevy_game.xcodeproj
移动端特定优化
1. 性能优化
use bevy::prelude::*;
fn main() {
App::new()
.insert_resource(Msaa::Off) // 关闭 MSAA 以提高性能
.add_plugins(DefaultPlugins.set(WindowPlugin {
primary_window: Some(Window {
resolution: (1280., 720.).into(),
..default()
}),
..default()
}))
.run();
}
2. 触摸输入处理
fn touch_system(touches: Res<Touches>) {
for touch in touches.iter() {
println!("触摸位置: {:?}", touch.position());
if touch.just_pressed() {
println!("开始触摸");
}
if touch.just_released() {
println!("结束触摸");
}
}
}
3. 屏幕适配
fn setup(mut commands: Commands) {
// 自适应相机
commands.spawn(Camera2dBundle {
projection: OrthographicProjection {
scale: 1.0,
..default()
},
..default()
});
}
常见问题和解决方案
-
Android 构建失败
- 检查 NDK 路径是否正确
- 确保所有必需的目标平台都已安装
- 验证 AndroidManifest.xml 配置
-
iOS 构建问题
- 确保 Xcode 命令行工具已安装
- 检查证书和配置文件
- 验证 Info.plist 设置
-
性能问题
- 使用发布模式构建
- 减少绘制调用
- 优化资源大小
- 使用适当的目标平台优化标志
最佳实践
-
资源管理
- 使用适合移动端的资源格式
- 实现资源异步加载
- 优化纹理大小和格式
-
输入处理
- 同时支持触摸和鼠标输入
- 实现手势识别
- 添加适当的触摸反馈
-
UI 设计
- 使用适合触摸的 UI 元素大小
- 实现响应式布局
- 考虑不同屏幕尺寸
发布准备
-
Android
- 签名 APK
- 优化 ProGuard 配置
- 准备 Play Store 材料
-
iOS
- 配置应用签名
- 准备 App Store 材料
- 完成应用审核清单
学习资源
- Bevy 移动端示例
- Bevy 官方文档
- Rust 移动端开发指南