Bevy 的三种时间
ZoOL 对 Bevy 时间系统的深入解析,版本 0.15。
定义对比
| 特性 | 真实时间 (Real) | 虚拟时间 (Virtual) | 固定时间 (Fixed) |
|---|---|---|---|
| 时间缩放 | ❌ 不可缩放 | ✅ 可缩放 | ✅ 可缩放 |
| 暂停 | ❌ 不可暂停 | ✅ 可暂停 | ✅ 可暂停 |
| 时间间隔 | 1/FPS | 1/FPS × 缩放比例 | 基于虚拟时间的固定值 |
| 默认访问 | Res<Time<Real>> | Res<Time> | Res<Time<Fixed>> |
使用场景
真实时间 (Real Time)
- UI 更新
- 需要记录真实世界流逝时间的系统
- 不受暂停/缩放影响
虚拟时间 (Virtual Time)
- 游戏计时
- 子弹时间、技能 CD
- 子弹时间特效(缩放实现慢动作)
固定时间 (Fixed Time)
- 物理模拟(稳定可预测)
- 动画更新
- AI 行为树
代码示例
// 设置固定时间间隔为 0.25s(64Hz)
app.insert_resource(Time::<Fixed>::from_seconds(0.25));
// 设置虚拟时间缩放为 2x
fn setup(mut time: ResMut<Time<Virtual>>) {
time.set_relative_speed(2.0);
}行为验证
教程中用视频演示了以下行为:
- 真实时间到 16s 时,固定/虚拟时间已到 32s(2x 缩放)
- 固定时间每帧固定 0.25s
- 暂停时: 虚拟时间 delta=0,但固定时间仍然保持 0.25s 间隔
诊断工具
INFO bevy diagnostic: fps : 60.051708 (avg 60.014163)
INFO bevy diagnostic: frame_time : 16.654797ms (avg 16.666525ms)
INFO bevy diagnostic: frame_count: 418.000000 (avg 358.500000)
FrameTimeDiagnosticsPlugin 提供实时帧率、帧时间和帧计数。
文件位置
/Users/zool/workspace/ZoOL's Valut/Bevy 的三种时间.md