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

Unity中使用Vector3.MoveTowards让光标返回初始位置失效问题

问题解决:让鼠标松开后Cursor平滑返回初始位置

你的代码问题出在OnMouseUp只执行一次——Vector3.MoveTowards只会在松开鼠标的那一帧计算一次位置变化,没法让cursor持续移动回初始点。要实现平滑返回的效果,得把移动逻辑放到每帧执行的Update里,用一个开关变量控制是否启动返回流程。

修改后的代码如下:

[SerializeField] private Transform cursor;
private Vector3 originalPosition;
private bool isReturning = false;

void Start()
{
    originalPosition = cursor.position;
    Debug.Log(originalPosition);
}

void Update()
{
    if (isReturning)
    {
        // 每帧向初始位置移动
        cursor.position = Vector3.MoveTowards(cursor.position, originalPosition, 10f * Time.deltaTime);
        
        // 当到达初始位置后停止移动
        if (Vector3.Distance(cursor.position, originalPosition) < 0.01f)
        {
            cursor.position = originalPosition;
            isReturning = false;
        }
    }
}

void OnMouseUp()
{
    Debug.Log("MouseUp");
    // 触发返回逻辑
    isReturning = true;
}

关键改动说明

  • 新增isReturning布尔变量,用来标记是否需要执行返回初始位置的逻辑
  • 把移动逻辑移到Update方法中,确保每帧都会计算并更新cursor的位置
  • 增加了距离判断,当cursor足够接近初始位置时,直接将其设为初始位置并停止移动,避免因精度问题导致的微小抖动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:30:54