一 坐标系简介
1 世界坐标系
可以用transform.position获取
2 局部坐标系
局部坐标系是相对于父物体来说的:
当2个游戏对象互为父子关系,那么子物体就会以父物体的坐标点为自身坐标原点
下面是子物体的Transform组件和打印的坐标结果,可以看出Transform组件显示的坐标是相对于父物体为坐标原点的
3 相机坐标系
根据观察位置和方向建立坐标系。
用次坐标系可以方便判断物体是否在相机前面,以及物体之间先后遮挡顺序,它会优先渲染离它最近的物体
4 屏幕坐标系
建立在屏幕上的二维坐标系,用来描述像素在屏幕上的位置
以屏幕左下角为坐标原点(0,0)。
右上角为(Screen.width,Screen.height),
void Update () {
if (Input.GetMouseButtonDown(0))
{
//获取游戏界面鼠标左键点击的坐标
Debug.Log(Input.mousePosition);
}
}
void Start (){ //获取游戏界面里选中物体的坐标
Vector3 vc = Camera.main.WorldToScreenPoint(transform.position);
Debug.Log(vc);
}
5 视口坐标系
视口坐标是标准的和相对于相机的。相机左下角为(0,0)点,右上角为(1,1)点。
二 坐标系的转换
1 全局坐标系转局部坐标系
public GameObject a;
void Start () {
Debug.Log("this的坐标" + this.transform.position);
Debug.Log("a的坐标" + a.transform.position);
//输出的是a-this的坐标
Vector3 v2 = this.transform.InverseTransformPoint(a.transform.position);
Debug.Log("全局坐标变局部坐标" + v2);
}
2 局部坐标系转全局坐标系
public GameObject a;
void Start () {
Debug.Log("this的坐标" + this.transform.position);
Debug.Log("a的坐标" + a.transform.position);
//输出的是a+this的坐标
Vector3 v1 = this.transform.TransformPoint(a.transform.position);
Debug.Log("局部转全局" + v1);
}