Unity中屏幕坐标,视口坐标,世界坐标的转换

几个坐标系

  • 世界坐标系:worldSpace

    通过transform.position与transform.rotation获得的位置和旋转信息都是基于世界坐标系的。以世界零点为中心原点

  • 局部坐标系

    以任意物体作为参考系,而不再是以世界零点作为参考系所获得的位置信息,比如A物体是B物体的父级,则B物体的局部坐标是相对与A物体的坐标,及A物体为坐标原点。

  • 观察坐标系:EyeSpace

    我们在Unity的Game视图中观察的画面始终是由摄像机提供的,基于摄像机的一个坐标系也就是"Eye Space"(简单来讲就是把摄像机看作原点位置)。

  • 视口坐标系:ViewSpace

    用于描述整个游戏画面的坐标,左下角为(0,0),右上角为(1,1),我们在设计分屏游戏的时候可以通过设置摄像机所占据的视口空间来控制。

  • 屏幕坐标系:Screen Space

    屏幕坐标和分辨率有关,屏幕的左下角为(0,0),但右上角为(screen.width,screen.height)。比如游戏的分辨率为500*600,则screen.width=500;screen.height=600。

一些API

//1.屏幕转世界坐标
Vector3 Camera.main.ScreenToWorldPoint(new Vector3(screenPos.x , screenPos.y , zInfo));
//2.世界转屏幕坐标
Vector3 Camera.main.WorldToScreenPoint(new Vector3(worldPos.x , worldPos.y , worldPos.z));
//3.世界转视口坐标
Vector3 Camera.main.WorldToViewportPoint();
//4.视口转世界坐标
Vector3 Camera.main.ViewportToWorldPoint(new Vector3(viewPortPos.x , viewPortPos.y , zInfo));
//5.视口转屏幕坐标
Vector3 Camera.main.ViewportToScreenPoint();
//6.屏幕转视口坐标
Vector3 Camera.main.ScreenToViewportPoint();