unity --23 世界坐标与局部坐标

世界(全局)坐标系:整个场景的固定坐标,不会变化,且只有一个。
局部坐标系:每个物体都有自己的独立的坐标系,原点为模型轴心点,随物体移动或旋转而改变。

所以单独给出一个vector3(0,0,1)或者vector3.forward,我们并不知道它属于哪个坐标系(原点在哪),也就不知道该向量的方向和大小。
前面之所以能用magnitude和normalized,是因为unity中vector向量运算默认处于世界坐标系。

transform.forward就是在世界坐标系中蓝色轴的投影,当局部坐标与世界坐标重合时, transform.forward就是(0,0,1).

如下蓝色轴旋转了30°,那么在世界坐标x轴上的投影是0.5,不受物体的位置影响
在这里插入图片描述unity --23 世界坐标与局部坐标_第1张图片
屏幕坐标系:以像素为单位,屏幕左下角为原(0,0)点,右 上角为屏幕宽、高度(Screen.width,Screen.height),Z为 到相机的距离。
•作用:表示物体在屏幕中的位置。

unity --23 世界坐标与局部坐标_第2张图片
Viewport Space
•视口(摄像机)坐标系:屏幕左下角为原(0,0)点,右上角为 (1,1),Z为到相机的距离。
•作用:表示物体在摄像机中的位置。
视口为比例表示。

局部坐标转世界坐标

transform.TransformPoint(局部坐标)

void Update () 
	{
          
          worldpoint=  transform.TransformPoint(0, 0, 10);
          Debug.DrawLine(transform.position,worldpoint);
       

    }

unity --23 世界坐标与局部坐标_第3张图片

世界坐标转局部坐标

transform.InverseTransformPoint

屏幕和世界坐标转换

Camera.main.WorldToScreenPoint
将点从世界坐标系转换到屏幕坐标系中
•Camera.main.ScreenToWorldPoint
将点从屏幕坐标系转换到世界坐标系中

Camera.main.WorldToViewportPoint
将点从世界坐标系转换到视口坐标系中
•Camera.main.ViewportToWorldPoint
将点从屏幕坐标系转换到世界坐标系中

注意转换都是屏幕(主摄像机)能看见的那部分。
unity --23 世界坐标与局部坐标_第4张图片

      point=   Camera.main.WorldToScreenPoint(Vector3.right);

此时Vector3.right不处于摄像机视锥部分,像素点为0。
unity --23 世界坐标与局部坐标_第5张图片
unity --23 世界坐标与局部坐标_第6张图片

你可能感兴趣的:(游戏引擎)