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

Unity 3D:3D物体像2D物体指向鼠标?已实现但不解代码原理

3D玩家朝向鼠标方向的代码原理解析

这段代码通过射线检测+方向向量计算,实现了3D玩家在水平面上跟随鼠标转向的效果,配合Rigidbody的旋转约束,完美模拟2D玩家的转向逻辑,下面拆解每一步的作用:

  • 射线检测获取鼠标对应的3D世界点

    • Ray ray = cam.ScreenPointToRay(Input.mousePosition);:将鼠标的2D屏幕坐标转换成3D空间中的射线,这条射线从相机位置出发,穿过鼠标在屏幕上的点延伸到3D世界中。
    • Physics.Raycast(ray, out RaycastHit hit):发射射线检测碰撞,当射线碰到带碰撞体的物体(比如地面)时,hit.point会存储鼠标在3D世界中对应的精确坐标,代码将这个坐标赋值给mousePos。
  • 计算玩家到鼠标点的方向向量

    • rotation = new Vector3(mousePos.x-transform.position.x, mousePos.y-transform.position.y,mousePos.z-transform.position.z);:用鼠标点的坐标减去玩家当前坐标,得到的向量就是玩家指向鼠标点的方向,这个向量包含了X、Y、Z三个轴的方向信息。
  • 剔除垂直方向的旋转影响

    • rotation.y = 0;:把方向向量的Y轴分量清零,只保留X-Z平面(水平面)上的方向。这一步确保玩家不会出现抬头或低头的旋转,完全贴合2D玩家仅在平面转向的需求。
  • 设置玩家朝向

    • transform.forward = rotation;:Unity中transform.forward代表物体自身的前方向(默认对应世界坐标系的Z轴正方向),将处理后的水平方向向量赋值给它,就能让玩家的正面直接朝向鼠标点的水平方向,完成转向。

另外你给Rigidbody设置的X轴和Z轴旋转约束是必要的:虽然代码已经剔除了Y轴方向的影响,但约束旋转轴能彻底避免极端场景下(比如鼠标点和玩家位置完全重合)可能出现的微小旋转异常,确保玩家始终保持直立状态,只绕Y轴旋转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:42:14