You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

游戏demo效果截图

问题原因

所有位移、旋转逻辑都写在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:24:03