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

Unity中如何让物体以指定恒定速度向鼠标位置移动?

解决Unity物体向鼠标恒定速度移动的问题

你当前代码用Vector2.Lerp的方式会导致速度不恒定,因为Lerp的插值比例是相对距离的百分比——鼠标离得越远,相同比例下移动的绝对距离就越大,自然速度变快。要实现恒定速度,得基于方向向量+归一化来处理,具体做法如下:

修改后的代码

public class PlayerMovement : MonoBehaviour
{
    // 这里直接设置恒定速度,单位是世界空间单位/秒(如果要对应px,需根据相机正交尺寸换算)
    public float moveSpeed = 20f;
    
    void Update()
    {
        // 获取鼠标的世界空间位置
        Vector3 mousePosition = Input.mousePosition;
        // 正交相机下,Z值设为和物体一致,避免位置偏移
        mousePosition.z = transform.position.z;
        mousePosition = Camera.main.ScreenToWorldPoint(mousePosition);
        
        // 计算指向鼠标的方向向量
        Vector3 moveDirection = mousePosition - transform.position;
        // 归一化方向(确保长度为1,这样乘以速度后就是恒定的每秒移动距离)
        if (moveDirection.magnitude > 0.01f) // 避免距离极近时的微小抖动
        {
            moveDirection.Normalize();
            // 按恒定速度移动
            transform.position += moveDirection * moveSpeed * Time.deltaTime;
        }
    }
}

关键说明

  • 方向向量归一化:moveDirection.Normalize()把向量长度缩为1,这样不管鼠标距离多远,每帧移动的距离都是moveSpeed * Time.deltaTime,保证速度恒定。
  • Z轴处理:把鼠标位置的Z值设为和物体一致,避免因相机ScreenToWorldPoint的Z值问题导致物体位置异常(尤其是正交相机场景)。
  • 抖动避免:加了moveDirection.magnitude > 0.01f的判断,当物体接近鼠标时停止移动,防止微小的来回抖动。

如果你的项目是2D场景,也可以用Vector2来简化代码,逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 03:54:27