U2L3——坐标系

本章代码关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//世界坐标系
this.transform.position; //对象相对于世界坐标系的位置的属性
this.transform.rotation; //对象相对于世界坐标系的旋转角度的属性,用四元数表示
this.transform.eulerAngles; //游戏对象相对于世界坐标系的角度的属性,用欧拉角表示
this.transform.lossyScale; //游戏对象相对于世界坐标系的缩放大小
//物体坐标系
this.transform.localPosition; //对象相对于父对象坐标系的位置的属性
this.transform.localEulerAngles; //对象相对于父对象的坐标系的角度的属性,用欧拉角表示,这里得到的角度范围一定是0~360
this.transform.localRotation; //对象相对于父对象坐标系的旋转角度的属性,用四元数表示
this.transform.localScale; //游戏对象相对于本地坐标系的缩放大小
//屏幕坐标系
Input.mousePosition; //获取鼠标在屏幕的位置,返回值是Vector3,但是只有x和y有值
Screen.width //当前屏幕的宽
Screen.height //当前屏幕的高
//坐标转换
//世界转本地
this.transform.InverseTransformPoint() //受到缩放影响的 世界坐标系的点 转换为 相对本地坐标系的点 的方法
this.transform.InverseTransformDirection() //不受缩放影响的 世界坐标系的方向 转换为 相对本地坐标系的方向 的方法
this.transform.InverseTransformVector() //受到缩放影响的 世界坐标系的方向 转换为 相对本地坐标系的方向 的方法
//本地转世界
this.transform.TransformPoint() //受到缩放影响的 本地坐标系的点 转换为 相对世界坐标系的点 的方法
this.transform.TransformDirection() //不受缩放影响的 本地坐标系的方向 转换为 相对世界坐标系的方向 的方法
this.transform.TransformVector() //受到缩放影响的 本地坐标系的方向 转换为 相对世界坐标系的方向 的方法
//屏幕或者视口转换相关
Camera.main.WorldToScreenPoint() //世界坐标转屏幕坐标 x和y对应的就是屏幕坐标 z对应的是这个3D物体里屏幕所在的平面的距离
Camera.main.ScreenToWorldPoint() //屏幕坐标转世界坐标
Camera.main.WorldToViewportPoint() //世界 转 视口
Camera.main.ViewportToWorldPoint() //视口 转 世界
Camera.main.ViewportToWorldPoint() //视口 转 屏幕
Camera.main.ScreenToWorldPoint() //屏幕 转 视口

Unity坐标系

unity有各种不同的坐标系,这些坐标系相互之间也有转换方法

Unity各种坐标系

世界坐标系

原点是世界的中心点
世界坐标系的三个轴向是固定的

image

物体坐标系

原点是物体的中心点(建模时决定),轴向:

  • 物体右方为X轴正方向
  • 物体上方为Y轴正方向
  • 物体前方为Z轴正方向

​​image​​

屏幕坐标系

原点:屏幕左下角
轴向:向右为X轴正方向,向左为Y轴正方向
最大宽高:Screen.width​、Screen.height​

image

视口坐标系

原点:屏幕左下角
轴向:向右为X轴正方向,向左为Y轴正方向
特点:左下角为(0, 0),右上角为(1, 1),和屏幕坐标类似,将坐标单位化

image

坐标获取

这里具体的内容在Transform​,Input.mousePosition​,Screen​,Camera​里有

直接获取

获取对象在物体世界坐标系的信息(Transform​)

1
2
3
4
this.transform.position;            //对象相对于世界坐标系的位置的属性
this.transform.rotation; //对象相对于世界坐标系的旋转角度的属性,用四元数表示
this.transform.eulerAngles; //游戏对象相对于世界坐标系的角度的属性,用欧拉角表示
this.transform.lossyScale; //游戏对象相对于世界坐标系的缩放大小

获取对象在父对象物体坐标系的信息(Transform​)

1
2
3
4
this.transform.localPosition;            //对象相对于父对象坐标系的位置的属性
this.transform.localEulerAngles; //对象相对于父对象的坐标系的角度的属性,用欧拉角表示,这里得到的角度范围一定是0~360
this.transform.localRotation; //对象相对于父对象坐标系的旋转角度的属性,用四元数表示
this.transform.localScale; //游戏对象相对于本地坐标系的缩放大小

获取屏幕坐标系上的信息(Input.mousePosition​,Screen.width​)

1
2
3
Input.mousePosition;            //获取鼠标在屏幕的位置,返回值是Vector3,但是只有x和y有值
Screen.width //当前屏幕的宽
Screen.height //当前屏幕的高

通过坐标转换获取

世界坐标系和父对象物体坐标系的转换(Transform的坐标转换)

1
2
3
4
5
6
7
8
//世界转本地
this.transform.InverseTransformPoint() //受到缩放影响的 世界坐标系的点 转换为 相对本地坐标系的点 的方法
this.transform.InverseTransformDirection() //不受缩放影响的 世界坐标系的方向 转换为 相对本地坐标系的方向 的方法
this.transform.InverseTransformVector() //受到缩放影响的 世界坐标系的方向 转换为 相对本地坐标系的方向 的方法
//本地转世界
this.transform.TransformPoint() //受到缩放影响的 本地坐标系的点 转换为 相对世界坐标系的点 的方法
this.transform.TransformDirection() //不受缩放影响的 本地坐标系的方向 转换为 相对世界坐标系的方向 的方法
this.transform.TransformVector() //受到缩放影响的 本地坐标系的方向 转换为 相对世界坐标系的方向 的方法

世界坐标系和屏幕坐标系的转换Camera.WorldToScreenPoint()​、Camera.ScreenToWorldPoint()​

1
2
Camera.main.WorldToScreenPoint()        //世界坐标转屏幕坐标 x和y对应的就是屏幕坐标 z对应的是这个3D物体里屏幕所在的平面的距离
Camera.main.ScreenToWorldPoint() //屏幕坐标转世界坐标

Camera的视口坐标系转换相关

视口坐标系与其他Unity坐标系相互转换的代码

1
2
3
4
Camera.main.WorldToViewportPoint()        //世界坐标系 转 视口坐标系
Camera.main.ViewportToWorldPoint() //视口坐标系 转 世界坐标系
Camera.main.ViewportToWorldPoint() //视口坐标系 转 屏幕坐标系
Camera.main.ScreenToWorldPoint() //屏幕坐标系 转 视口坐标系