unity转换坐标都有现成的接口直接调用就能得到正确的坐标(但是透视模式 世界坐标 转 屏幕坐标 的时候要注意一个问题)
正交模式
世界坐标转屏幕坐标
Vector3 _w1= new Vector(0, 0, 0);
Vector3 _s1= Camera.main.WorldToScreenPoint(_w1);
屏幕坐标转世界坐标
Vector3 _s1= Input.mousePosition;
Vector3 _w1= Camera.main.ScreenToWorldPoint(_s1);
正交模式这样调用是没问题的,但是透视模式这样会有问题
透视模式
世界坐标转屏幕坐标
Vector3 _w1= new Vector(0, 0, 0);
Vector3 _s1= Camera.main.WorldToScreenPoint(_w1);
这块是和正交模式一样,没问题
屏幕坐标转世界坐标
Vector3 _s1= Input.mousePosition;
// 注意:这里的**z**轴,如果不设置z轴,调用下面转换坐标,返回的是相机当前的世界坐标
_s1.z -= Camera.main.transform.position.z;
Vector3 _w1= Camera.main.ScreenToWorldPoint(_s1);