ScreenToWorldPoint(Input.mousePosition)就是将屏幕坐标转换为世界中的坐标 ,但是在使用此函数之前,首先要明确摄像机的两种投影模式,不同的投影方式,转换的效果也不太相同。
透视模式(Perspective):
当摄像机处于透视模式下,转换屏幕坐标到世界坐标时,z
值起着关键作用。以下是具体原因:
-
透视投影的特点:
透视模式模拟人类眼睛的视角,物体会随着与摄像机距离的增加而显得更小。透视投影是以摄像机为中心向外放射的,因此需要深度信息(z
值)来确定物体在三维空间中的具体位置。 -
z值的重要性:
z
值指定了物体距离摄像机的深度。没有z
值,无法明确该点在摄像机前方的哪个位置。因此如果z
值为0,转换后的坐标始终是摄像机的坐标,这是因为在透视模式下,z=0
意味着点与摄像机位于同一位置。 -
视锥体:
透视模式使用视锥体来描述摄像机的视野,物体的位置需要在这个三维视锥体内指定。指定不同的z值,也即是确定转换后的坐标处于视椎体中的哪一个截面。
正交模式(Orthographic):
当摄像机处于正交模式时,z
值的作用则相对简单:
-
正交投影的特点:
正交模式没有透视缩放,物体不会因为远离摄像机而显得更小,所有对象的大小在视图中保持一致。转换屏幕坐标时,x和y坐标不需要深度信息(z
值)即可计算其在世界空间中的位置。 -
不需要指定z值:
在正交投影中,ScreenToWorldPoint
只需要x和y即可确定对象的位置,z值只用来确定在深度方向上的层级,而不影响x、y方向的转换。即使不指定z值,正交模式下,x和y的映射是直接的且线性的。
结论
- 透视模式:需要指定
z
值,因为它影响物体在三维空间中的位置,决定物体的深度和缩放效果。 - 正交模式:不需要
z
值即可获取x、y坐标的世界空间位置,因为视图是平行投影,不存在缩放。