2401_84678727 2024-05-07 21:28 采纳率: 100%
浏览 3
已结题

untiy2d中,为什么将maincream投影改为透视,就没办法正确获得鼠标点击的世界坐标

private Vector3 mouseWorldPos => Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,Input.mousePosition.z));

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-07 21:28
    关注

    引自免费微信小程序:皆我百晓生

    在Unity 2D中,当摄像机(Camera)的投影模式从正交(Orthographic)更改为透视(Perspective),获取鼠标点击世界坐标的逻辑会有所变化。这是因为正交投影与透视投影处理屏幕到世界空间转换的方式不同。

    在正交投影中,Z轴是忽略的,所以通常用来表示距离摄像机远近的是X和Y轴。而在透视投影中,Z轴代表深度信息,因此你需要为ScreenToWorldPoint方法提供一个合适的Z值。

    为了适应透视投影,你可以使用摄像机的近裁剪面(Near Clip Plane)作为Z值。以下是修改后的代码:

    private Vector3 mouseWorldPos => Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.nearClipPlane));
    

    这段代码将会根据当前摄像机的透视设置正确地计算出鼠标点击的世界坐标。注意这里的Z值使用了Camera.main.nearClipPlane,这个属性代表摄像机的近裁剪平面的距离,对于透视投影来说,这是一个合理的默认选择。

    如果你的场景中有特殊需求,可能需要根据具体情况进行调整,比如使用鼠标点击的深度或其他定制的Z值。但是,上述代码应该能解决大多数情况下的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月16日
  • 已采纳回答 5月8日
  • 创建了问题 5月7日

悬赏问题

  • ¥30 电脑误删了手机的照片怎么恢复?
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计
  • ¥15 来一个cc穿盾脚本开发者
  • ¥15 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办
  • ¥15 有人懂怎么做大模型的客服系统吗?卡住了卡住了
  • ¥20 firefly-rk3399上启动卡住了