一、FixedUpdate的定义与基本概念
FixedUpdate是Unity引擎中MonoBehaviour类提供的一个特殊回调方法,与普通的Update方法不同,它主要设计用于处理物理相关的计算和更新。
void FixedUpdate()
{
// 适合放置物理计算相关代码
rb.AddForce(Vector3.forward * 10f);
}
核心特性
- 固定时间间隔:FixedUpdate以固定的时间步长执行,不受帧率波动影响
- 物理系统同步:与Unity的物理引擎计算同步,在物理步骤前调用
- 可配置:执行频率可通过项目设置中的Fixed Timestep参数调整
二、内部调用机制
1. 物理计算循环
Unity内部的物理更新循环与常规游戏循环分离,遵循以下流程:
主循环每帧
└── 检查是否需要进行物理更新
├── 计算积累的时间
├── 如果积累时间 >= fixedTimeStep
│ ├── 调用所有启用的FixedUpdate()方法
│ ├── 进行物理模拟步骤
│ ├── 更新物理状态(碰撞器、刚体等)
│ ├── 生成碰撞/触发事件
│ ├── 减少积累时间(积累时间 -= fixedTimeStep)
│ └── 如果仍有足够的积累时间,重复上述步骤
└── 继续主循环其他操作
2. 积累时间机制
Unity使用时间积累器(accumulator)来确定何时执行FixedUpdate:
// Unity内部伪代码
float physicsTimeAccumulator = 0;
void MainGameLoop()
{
float deltaTime = CalculateDeltaTime();
physicsTimeAccumulator += deltaTime;
// 可能在一帧内执行多次FixedUpdate
while (physicsTimeAccumulator >= Time.fixedDeltaTime)
{
ProcessFixedUpdate();
SimulatePhysics();
physicsTimeAccumulator -= Time.fixedDeltaTime;
}
// 继续处理Update等其他方法
ProcessUpdate();
// ...
}
3. 时间步长设置
固定时间步长在Unity编辑器中通过:Edit → Project Settings → Time → Fixed Timestep配置。

默认值为0.02秒,相当于50Hz的物理更新频率。
Fixed Timestep = 0.02 → 每秒执行50次FixedUpdate和物理计算
Fixed Timestep = 0.01 → 每秒执行100次FixedUpdate和物理计算

最低0.47元/天 解锁文章
1908

被折叠的 条评论
为什么被折叠?



