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

Unity中使用MoveTowards实现双GameObject触摸分向移动失败问题排查

排查Unity中MoveTowards触摸移动失效的问题

嘿,我来帮你捋一捋这个问题!Vector3.MoveTowards本身是Unity内置的静态方法,不需要额外引入特殊类或插件,没生效大概率是用法细节没处理对,下面是几个常见的排查方向:

  • 必须在帧更新函数里调用
    MoveTowards是计算单帧内的位置增量,要是只调用一次(比如在Start里),物体只会瞬间跳一下或者完全没反应。一定要把移动逻辑放在Update或FixedUpdate里,保证每一帧都更新位置。

  • 触摸坐标要转成世界空间坐标
    触摸输入的position是屏幕像素坐标,直接用的话和物体的世界坐标不在一个空间里。必须用Camera.ScreenToWorldPoint()转换,还要注意Z轴的设置:

    • 2D场景:把目标位置的Z值设成和物体当前的Z值一致,避免物体被相机拉远/拉近
    • 3D场景:Z值要设置成相机到物体所在平面的距离
  • 速度要乘以Time.deltaTime
    要是直接写固定数值当移动步长,不同帧率下移动速度会不一致,而且数值太小的话看起来就像没动。记得用moveSpeed * Time.deltaTime来保证帧率无关的平滑移动。

  • 检查两个物体的逻辑是否独立
    别把两个物体的目标位置搞混了,比如不小心让两个物体都追同一个触摸点;还要确认脚本有没有正确挂载,或者物体有没有被设置成静态(静态物体无法移动)。

给你一个可用的示例代码(2D场景)

using UnityEngine;

public class DualTouchMovement : MonoBehaviour
{
    // 在Inspector里拖入两个需要移动的物体
    public GameObject objectA;
    public GameObject objectB;
    // 移动速度,可在Inspector调整
    public float movementSpeed = 6f;

    void Update()
    {
        // 检测是否有至少两个触摸点
        if (Input.touchCount >= 2)
        {
            // 第一个触摸点控制objectA
            Touch touchA = Input.GetTouch(0);
            Vector3 targetPosA = Camera.main.ScreenToWorldPoint(touchA.position);
            // 保持Z轴和物体一致,避免偏移
            targetPosA.z = objectA.transform.position.z;
            objectA.transform.position = Vector3.MoveTowards(
                objectA.transform.position, 
                targetPosA, 
                movementSpeed * Time.deltaTime
            );

            // 第二个触摸点控制objectB
            Touch touchB = Input.GetTouch(1);
            Vector3 targetPosB = Camera.main.ScreenToWorldPoint(touchB.position);
            targetPosB.z = objectB.transform.position.z;
            objectB.transform.position = Vector3.MoveTowards(
                objectB.transform.position, 
                targetPosB, 
                movementSpeed * Time.deltaTime
            );
        }
    }
}

额外注意点

如果你的物体带有Rigidbody(2D或3D),建议用Rigidbody.MovePosition()代替直接修改transform.position,这样能和物理系统兼容,避免穿模或抖动的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:05:47