Unity3D之坐标系的转换
Unity3D之坐标系的转换
一, Unity中的常用坐标系
1⃣️,世界坐标系 (左手定则)
this.transform.Position
2⃣️,本地坐标系(左手定则)
this.transform.LocalPosition
3⃣️,屏幕坐标系
1,左下角为原点(0,0)
2,右上角为 (Screen.Width,Screen.Hight)
3,Z的位置是以相机的世界单位来衡量//及物体离相机远近
4,和屏幕分辨率有关
5,鼠标位置坐标属于屏幕坐标,Input.mousePosition可以获得鼠标坐标,当用Input.MousePosition获取鼠标位置的时候,他的Z轴值一直为0
public Vector3 MyScreenToWorld( Vector3 mousePos, Transform targetTransform ){
Vector3 dir = targetTransform.position - Camera.main.transform.position;
//计算投影
Vector3 normalDir = Vector3.Project( dir, Camera.main.transform.forward );
//物体离相机远近 (normalDir.magnitude)
Vector3 worldPos = Camera.main.ScreenToWorldPoint( new Vector3( mousePos.x , mousePos.y, normalDir.magnitude) );
return worldPos;
}
6,手指触摸屏也为屏幕坐标,Input.GetTouch(0).position可以获得单个手指的手机屏幕坐标
4⃣️,视口坐标系
1,左下角为原点(0,0)
2,右上角为(1,1)
二,坐标系转换
1⃣️,世界坐标和本地坐标转换
1,本地转世界 : this.transform.TransformPoint(0,0,0);
2,世界转本地: this.transform.InverseTransformPoint(0,0,0);
2⃣️,世界坐标和屏幕坐标转换
1, 世界转屏幕:Camera.main.WorldToScreenPoint( vector3 );
2, 屏幕转世界:Camera.main.ScreenToWorldPoint(vector3);
3⃣️,世界坐标和视口坐标转换
1,世界转视口:Camera.main.WorldToViewportPoint(0,0,0);
2, 视口转世界:Camera.main.ViewportToWorldPoint(0,0,0);
4⃣️,屏幕坐标和视口坐标转换
1,屏幕转视口:Camera.main.ScreenToViewportPoint(0,0,0);
2, 视口转屏幕:Camera.main.ViewportToScreenPoint(0,0,0);
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); // 从鼠标位置发送射线
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100, 1 << LayerMask.NameToLayer("Plane")))
{
Debug.Log(hit.collider.name);
}
}
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0)); // 从屏幕中央发送射线
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100, 1 << LayerMask.NameToLayer("Plane")))
{
Debug.Log(hit.collider.name);
}
}
©著作权归作者所有:来自51CTO博客作者Aonaufly的原创作品,如需转载,请注明出处,否则将追究法律责任