Unity WebGL构建后精灵的脚本控制移动及旋转速度明显变慢是什么原因?

问题原因
所有位移、旋转逻辑都写在Update()中,且直接使用固定数值调整transform属性,未乘以时间增量,导致移动、旋转速度和运行环境的帧率直接绑定。
Unity的Update()调用频率与当前设备的运行帧率完全挂钩,编辑器环境下通常帧率较高(普遍可达60帧及以上),WebGL构建后受浏览器性能、硬件性能限制,帧率会明显低于编辑器环境,单位时间内Update()的执行次数更少,相同固定值叠加后整体表现就是速度大幅变慢。
修复方案
- 调整位移、旋转计算逻辑,所有固定调整值乘以
Time.deltaTime,该参数代表上一帧到当前帧的时间间隔,乘算后位移、旋转的数值会变成每秒固定值,不再受帧率波动影响。
修复后的代码如下:
巫师控制脚本
using System.Collections; using System.Collections.Generic; using UnityEngine; public class WizardMover : MonoBehaviour { // 此处参数代表每秒的移动距离 public Vector3 move; void Update() { // 巫师到达指定位置后停止移动 if (transform.localPosition.x > 5.79) { transform.localPosition -= move * Time.deltaTime; } } }
斧头控制脚本
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AxeFly : MonoBehaviour { // move代表每秒移动距离,rotate代表每秒旋转的欧拉角数值 public Vector3 move; public Vector3 rotate; void Update() { transform.localPosition -= move * Time.deltaTime; // 斧头被投掷后开始旋转 if (transform.localPosition.x < 5.80) { transform.Rotate(rotate * Time.deltaTime); } } }
- 参数校准:修改代码后,你需要调整Inspector面板中
move、rotate的参数值,换算公式为:新参数值 = 旧参数值 × 编辑器运行时的平均帧率(比如编辑器平均帧率为60,就将旧数值乘以60,即可还原你之前在编辑器中看到的效果)。
额外注意
因为斧头挂载了Rigidbody组件,后续如果需要添加物理相关的力、速度调整逻辑,建议将对应逻辑写在FixedUpdate()中执行,避免物理表现出现不一致问题。
内容的提问来源于stack exchange,提问作者user10004335
相关产品推荐
相关产品推荐

