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

如何在点击鼠标时让2D Rigidbody平滑移动到鼠标位置

解决Unity 2D刚体朝向鼠标位置施加力的平滑移动问题

我来帮你搞定这个鼠标控制2D刚体移动的问题!先梳理下你当前代码里的核心问题,再直接上可运行的解决方案:

你的现有代码里有几个关键误区:

  • 直接用GameObject.Find("Camera")效率极低,且场景多相机时容易出错,改用Camera.main更稳妥(记得给主相机打上MainCamera标签)
  • Input.mousePosition是屏幕像素坐标,不是游戏世界坐标,直接用它计算方向完全不对
  • 每帧重复查找room组件会拖慢性能,应该提前缓存

下面是修正后的完整代码,我会逐行解释关键逻辑:

// 提前缓存常用组件,避免每帧重复查找
private Camera mainCamera;
private room playerRoom;
private Rigidbody2D rb;

void Start()
{
    mainCamera = Camera.main;
    // 假设这个脚本挂在玩家物体上,若不是请自行调整获取刚体的方式
    rb = GetComponent<Rigidbody2D>();
    // 缓存room组件,只查找一次
    playerRoom = mainCamera.GetComponent<room>();
}

void Update()
{
    Vector2 mousePos = Input.mousePosition;
    if (playerRoom.playerNum == 1)
    {
        if (Input.GetMouseButtonDown(0))
        {
            // 关键步骤1:把屏幕鼠标坐标转换成游戏世界坐标
            // 正交相机需要设置Z值(取相机到物体的距离,这里用相机负Z值即可)
            Vector3 worldMousePos = mainCamera.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, -mainCamera.transform.position.z));
            Vector2 targetPos = new Vector2(worldMousePos.x, worldMousePos.y);

            // 关键步骤2:计算刚体到鼠标位置的方向向量,归一化后保证方向稳定
            Vector2 moveDirection = (targetPos - rb.position).normalized;

            // 关键步骤3:施加平滑移动的力,力的大小可根据需求调整
            float forceMagnitude = 500f;
            rb.AddForce(moveDirection * forceMagnitude, ForceMode2D.Force);
        }
    }
}

核心细节说明:

  • 坐标转换:ScreenToWorldPoint必须传入Z值,因为屏幕坐标是2D的,要对应到3D世界的Z平面,正交相机下用-mainCamera.transform.position.z就能得到正确的世界位置
  • 方向归一化:如果不归一化,鼠标离刚体越远,施加的力就越大,移动速度会忽快忽慢;归一化后力的大小只由你设置的forceMagnitude控制
  • 力的模式:ForceMode2D.Force是基于帧率的平滑力,适合持续移动;如果需要瞬间爆发的移动效果,可以改用ForceMode2D.Impulse
  • 组件缓存:把Camera、Rigidbody2D、room组件在Start里缓存,避免每帧调用Find或GetComponent,大幅提升性能

如果还是没效果,可以检查这几点:

  • 玩家物体上是否确实挂了Rigidbody2D组件,且没有勾选Kinematic(运动学刚体不会受外力影响)
  • 主相机是否正确设置了MainCamera标签,否则Camera.main会返回null
  • 根据物体质量调整forceMagnitude的数值,找到适合你游戏的力度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:12:36