Unity 世界坐标转UI坐标

Unity中有四种坐标系
1. World Space(世界坐标):三维空间坐标,浮点数。
2.Screen Space(屏幕坐标):以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。
3.ViewPort Space(视口坐标):视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。
4.UGUI界面的坐标系:与锚点有关,锚点(在父UI的坐标为(x1, y1))所在位置即为(0,0),X坐标范围为(-x1,Screen.width-x1),y坐标范围为(-y1,Screen.height-y1)。

Vector3 ptScreen = Camera.main.WorldToViewportPoint(transform.position);

//锚点位置左下角
Vector2 viewPortRelative = new Vector2(e.ptScreen.x, e.ptScreen.y);


//锚点位置正中
//Vector2 viewPortRelative = new Vector2(e.ptScreen.x - 0.5f, e.ptScreen.y - 0.5f);

Vector2 cubeScreenPos = new Vector2(viewPortRelative.x * Screen.width, viewPortRelative.y * Screen.height);