关于Unity坐标系

401 阅读1分钟

关于Unity坐标系

Inspector中的坐标(本地坐标)

在Inspector窗口中的position以及rotation都是属于本地坐标(相对于父对象的坐标),例如:父对象的世界坐标为(1,1,1),子对象的Inspector中显示的坐标为(1,1,1),则子对象中世界坐标为(2,2,2),本地坐标localPosition(1,1,1)。代码中,transform.position是世界坐标,transform.localPosition是本地坐标

父节点与子节点的结构

image.png

父节点的Inspector窗口

image.png

子节点的Inspector窗口

image.png

运行结果

image.png

屏幕坐标系以及视口坐标系

屏幕坐标:以左下角为(0,0),右上角为(width, height)

image.png

大小为Game中设置

image.png

Input.mousePositon所记录的坐标,也是屏幕坐标,坐标值可以超出屏幕大小

视口坐标:以左下角为(0,0),右上角为(1,1),相当于把屏幕坐标比例化

坐标间的相互转换

Transform类中的方法(世界坐标与本地坐标的转换):

1、Tranform.TransformPoint(Vector3 position)
将物体的本地坐标(Inspector中的坐标)转换成世界坐标(在整个场景中的坐标)

2、Transform.TransformDirection(Vector3 direction)
将一个本地向量转换成世界坐标系中的向量

3、Transform.InverserTransformPoint(Vector3 position)
将当前的世界坐标转换成本地坐标

4、Transform.InverserTransformDirection(Vector3 direction)
将当前世界坐标系中的向量转换成本地坐标系中的向量

Camera类中方法(世界坐标与视口坐标、屏幕坐标的转换):

1、Camera.ScreenToWorldPoint(Vector3 position)
将屏幕坐标转换成世界坐标

2、Camera.WorldToScreenPoint(Vector3 position)
将世界坐标转换成屏幕坐标

3、Camera.WorldToViewportPoint(Vector3 position)
将世界坐标系转换成视口坐标

4、Camera.ViewportToWorldPoint(Vector3 position)
将视口坐标转换为世界坐标