Bevy 的三种时间

ZoOL 对 Bevy 时间系统的深入解析,版本 0.15。

定义对比

特性真实时间 (Real)虚拟时间 (Virtual)固定时间 (Fixed)
时间缩放❌ 不可缩放✅ 可缩放✅ 可缩放
暂停❌ 不可暂停✅ 可暂停✅ 可暂停
时间间隔1/FPS1/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