全局坐标系(世界坐标系)
- 在Unity中创建的物体都是以全局坐标系中的坐标原点(0,0,0),来确定各自的位置的
- Unity中,如果一个游戏物体没有父物体,则 Inspector中transform 显示的为全局坐标
- Unity中,可以用 transform.position 取得一个物体的世界坐标
局部坐标系(物体坐标系、模型坐标系)
- 每个物体都有自身独立的物体坐标系;当物体移动或改变方向时,和该物体相关联的局部坐标系本身将随之移动或改变方向
- Unity中模型Mesh保存的顶点坐标均为局部坐标系下的坐标,因此物体的改变并不会影响顶点的坐标
- 如果一个游戏物体是另一个的子物体,则该物体的坐标 在 Inspector 中 transform 显示的为其父物体的局部坐标。 其实子物体的坐标是相对于其父物体的原点坐标来计算的。
- 可以通过 transform.localPosition 取得一个物体在其父物体的局部坐标系中的坐标
- 如果该游戏物体没有父物体,那么 transform.localPosition 获得的依然是该物体在全局坐标系中的坐标。
- 如果该物体有父物体,则获得是在其父物体的局部坐标系中的坐标。此时 检视视图中显示的为 localPosition 的值。
屏幕坐标系
- 屏幕坐标系是建立在屏幕上的二维坐标系;是以像素为单位,屏幕的左下角为(0, 0),右上角为 (Screen.width, Screen.height);z轴坐标为相机的世界坐标中z轴的负值
- 鼠标位置坐标属于屏幕坐标 , 可以使用 Input.mousePosition 获得鼠标当前位置的坐标。通过该函数返回的是
Vector3
类型的变量,但z
分量始终为0。- 手指触摸屏幕的坐标属于屏幕坐标 ; 可以使用Input.GetTouch(0).position 可以获得单个手指触摸屏幕时手指的坐标。
视口坐标系
视口坐标系是与屏幕坐标系息息相关的,它是将 Game视图的屏幕坐标系单位化,即左下角为(0, 0),右上角为(1, 1),z轴坐标是相机的世界坐标中z轴坐标的负值
假如说屏幕坐标系左下角是(0,0), 右上角是 (800,600)。 现在在一个点在屏幕坐标系上的坐标为 (200,450)。 现在我们把该点的坐标单位化为: x = =( 200/800 = 0.25), y == ( 450 / 600 = 0.75 ), 最终该点单位化的结果坐标为 (0.25,0.75,0)
如何获得视口坐标系?
- 世界坐标系可以转换为一个视口坐标系
- 屏幕坐标系可以转换为一个视口坐标系
观察坐标(Eye Space)
- 在Game视图中的画面是由摄像机提供的,而基于某一个摄像机的坐标系即为观察坐标系;即把摄像机的位置看作原点位置