这两个函数是相机Camera类的函数,主要用来作为点在屏幕坐标系与世界坐标系下的坐标相互转换。


官方文档中的介绍:

ScreenToWorldPoint:从屏幕空间到世界空间的变化位置。屏幕空间以像素定义。屏幕的左下为(0,0);右上是(pixelWidth,pixelHeight),Z的位置是以世界单位衡量的到相机的距离。

WorldToScreenPoint:从世界空间到屏幕空间变换位置。屏幕空间以像素定义,屏幕左下为(0,0),右上是(pixelWidth,pixelHeight),Z的位置是以世界单位衡量的到相机的距离。

这里关于到屏幕坐标的转换或者由屏幕坐标向世界坐标系的转换,关于屏幕坐标的部分都是由一个 Vector3 描述的。针对这个返回值,前两个分别代表在屏幕坐标的x轴与y轴,屏幕左下角为起点(0,0),水平为x轴,竖直为y轴。

主要讨论一下这个vector3的第三个值的意义

这个第三个值指的是在世界坐标系中,指定的点到相机平面之间的距离,也就是到相机的xy平面的距离,也即物体到相机的连线在相机本体坐标系的z轴上的投影。

下面用一个简单的例子看一下:

首先把一个cube放在(0,0,0)的位置,相机置于(0,0,-10)的位置,z轴正对cube。
在这里插入图片描述

此时Log一下cube的positon在屏幕坐标系下的位置(用WorldToScreenPoint),发现结果如下,第三个值为10。
在这里插入图片描述

接下来将相机绕Y轴分别旋转45度与90度,执行同样的操作。发现45度时第三个值为10*cos(45度),约为7.1。当旋转90度时,第三个值为0。可以验证。
45度:
在这里插入图片描述
在这里插入图片描述
90度:
在这里插入图片描述
在这里插入图片描述

Logo

这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!

更多推荐