You need to enable JavaScript to run this app. Unity调用WorldToScreenPoint返回过大数值,物体跟随光标功能异常
优惠活动
大模型
产品
解决方案
定价
更多

Unity调用WorldToScreenPoint返回过大数值,物体跟随光标功能异常

问题核心原因

你调用Unity相机坐标转换API的逻辑完全颠倒了:

  • Camera.WorldToScreenPoint的作用是接收世界坐标系下的三维坐标,返回该点映射到屏幕坐标系的坐标值。你传入的Input.mousePosition本身就属于屏幕坐标,输入参数类型完全不匹配,自然会返回不符合预期的异常数值。
  • 实现物体跟随光标需要使用相反的API:Camera.ScreenToWorldPoint,作用是将屏幕坐标转换为对应世界坐标系下的坐标,才能直接赋值给物体的transform.position属性。

现存代码额外错误

  1. 你手动修改了mousePos变量的Z值,但调用API时传入的仍然是原始未修改Z值的Input.mousePosition,修改后的Z值完全没有生效。
  2. 屏幕坐标转世界坐标时,Z值需要设置为相机到目标物体在世界坐标系下的轴向距离,不能随意设置为-1:如果使用正交相机,Z值可以保持和你期望物体停留的世界Z轴值匹配;如果使用透视相机,需要确保Z值大于相机的近裁剪面距离。

修正后的参考代码

Camera cam;

void Start()
{
    cam = Camera.main;
}

void Update()
{
    Vector3 mousePos = Input.mousePosition;
    // 示例:假设相机世界Z值为-10,期望物体在世界Z=0位置,此处填10即可,可根据你的需求调整
    mousePos.z = 10f; 
    Vector3 targetWorldPos = cam.ScreenToWorldPoint(mousePos);
    transform.position = targetWorldPos;
}

关于4:3纵横比的说明

屏幕纵横比不会对坐标转换API的计算逻辑造成异常影响,只要相机视口设置适配当前屏幕,转换过程会自动适配当前分辨率与纵横比参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 18:21:03