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值。

猜你喜欢

转载自blog.csdn.net/weixin_61743641/article/details/128451342
今日推荐