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

Unity 2D移动端Sprite触摸拖拽延迟问题求助

解决Unity 2D移动端拖拽Sprite的滞后问题

快速拖拽时的滞后通常来自三个核心问题:每帧重复查找主相机的性能开销、Update阶段执行拖拽逻辑导致的帧内时序偏差,以及触摸输入处理的不严谨。以下是针对性的优化方案:

优化步骤与代码实现

1. 缓存主相机引用

Camera.main会每帧在场景中查找带有"MainCamera"标签的对象,频繁调用会产生不必要的性能消耗,尤其在移动端。提前缓存可以避免这个问题:

private Camera mainCamera;
private Vector3 touchOffset;

void Awake()
{
    mainCamera = Camera.main; // 仅在初始化时查找一次
}

2. 改用LateUpdate执行拖拽逻辑

Update会在帧渲染前执行,但如果有其他逻辑占用了帧时间,拖拽更新会滞后。LateUpdate在所有Update执行完成后才运行,能确保触摸位置的更新是当前帧的最后一步,最大程度减少视觉滞后:

void LateUpdate()
{
    if (Input.touchCount <= 0) return;

    Touch touch = Input.GetTouch(0);
    Vector3 touchWorldPos = mainCamera.ScreenToWorldPoint(touch.position);
    touchWorldPos.z = 0f; // 保持2D平面的Z轴一致

    switch (touch.phase)
    {
        case TouchPhase.Began:
            // 记录触摸点与Sprite中心的偏移,避免拖拽时Sprite跳转到手指位置
            touchOffset = transform.position - touchWorldPos;
            break;
        case TouchPhase.Moved:
        case TouchPhase.Stationary:
            // 仅在触摸移动或保持时更新位置,避免无意义的重复赋值
            transform.position = touchWorldPos + touchOffset;
            break;
    }
}

3. 额外优化建议

  • 如果Sprite带有Rigidbody2D组件,关闭其重力并设置Body Type为Kinematic,避免物理引擎的干扰导致滞后
  • 确保Sprite的Sorting Layer和Order in Layer设置正确,避免渲染层级问题造成的视觉延迟
  • 测试时使用真机而非编辑器,编辑器的触摸模拟本身可能存在延迟

内容的提问来源于stack exchange,提问作者user29486810

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:54:56