为什么Unity导出WebGL版本后游戏内物体移动速度异常变快?
故障排查及修复方案
- 核心问题:
Rigidbody2D相关的物理位移操作错误放在了Update()函数中执行Update()的执行频率和设备帧率完全绑定,WebGL端运行帧率和Unity编辑器帧率存在较大差异,即便乘以Time.deltaTime,也会因为物理更新和帧更新步长不匹配出现速度异常FixedUpdate()以固定时间步长(默认0.02s)执行,完全不受帧率波动影响,是Unity官方规定的物理相关逻辑的执行位置
- 修复步骤:
- 将代码中原来的
Update()方法重命名为FixedUpdate() - 将位移逻辑中的
Time.deltaTime替换为Time.fixedDeltaTime
修复后的代码片段如下:
void FixedUpdate() { rigidbody.MovePosition(transform.position + new Vector3 (0, -1, 0) * speed * Time.fixedDeltaTime); }
- 额外可选排查项:
- 打开项目设置
Time面板,确认Fixed Timestep数值保持默认0.02未被修改 - 检查WebGL构建设置中的目标帧率配置,不要设置超过60的固定帧率
- 全局排查是否存在修改
Time.timeScale的逻辑,确保游戏运行时该值恒为1
- 打开项目设置
内容的提问来源于stack exchange,提问作者LWB
相关产品推荐
相关产品推荐

