unity中屏幕坐标转换为世界坐标问题Camera.main.ScreenToWorldPoint(Input.mousePosition)

unity中屏幕坐标转换为世界坐标问题

首先简单练习一下坐标转换(熟练坐标转换的可以直接看结论或分析)

练习

题目场景:原坐标系的原点(0,0)偏移到(1,1)点

1.分清点问题还是坐标问题(关键步骤避免坐标系变换让人头晕)

点问题还是坐标问题,点问题还是坐标问题,点问题还是坐标问题

点问题:绝对固定点的坐标值变换

例如上述中的原坐标系的(2,2)点,在新坐标系中是(1,1),虽然坐标改变了但是点没有变

坐标问题:新旧坐标相同的点变化

例如上述问题中(0,0)偏移到(1,1),新旧坐标系均是(0,0),坐标相同但是是不同点

2.定义偏移量(结论)

我们再定义一个偏移量

点问题中,偏移量=新坐标-旧坐标=(1,1)-(2,2)

坐标问题中,偏移量=旧坐标系原点-旧坐标系新点=新坐标系原点-新坐标系新点

                                =(0,0)-(1,1)=(-1,-1)-(0,0)(原点和新点是根据偏移过程判断)

分析屏幕坐标转换为世界坐标

我们假设屏幕的宽和高设为和世界坐标相同(注意),在game栏中长2W,宽2H

现在的问题是一个鼠标坐标(0,0,0)转换成世界坐标后变成了(-W,-H,-10),世界坐标系中原点是(0,0,0)

在这个点问题中,偏移量是(-W,-H,-10)

凭借结论我们可以很轻易的得到世界坐标系中原点(屏幕坐标系原点在世界坐标系的坐标)是:新坐标新点+偏移量=(W,H,-10)

我们看出屏幕坐标原点在左下角的位置投影到z=-10的位置,也就是说与相机同面的左下角点就是屏幕坐标系原点。

验证:

旧坐标系新点=旧坐标系原点-偏移量=(0,0,0)-(-W,-H,-10)=(-W,-H,10)

结论

要将屏幕坐标的z值转换成z=游戏对象所在平面z值-摄像头z值(均在世界坐标系中),即目标对象在屏幕坐标系的z值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值