void Update()
{
Vector2 pos;
//if 提示面板要跟随鼠标移动 就输入鼠标位置 else if 提示面板要显示在物体上面 输入物体世界坐标转换到屏幕坐标的值
Vector2 screenPos = isMousePosition == true ? Input.mousePosition : Camera.main.WorldToScreenPoint(worldPosition);
//将屏幕坐标转换成ui局部坐标
RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRectTransform, screenPos, null, out pos);
transform.localPosition = pos;
}
另一种方法,代码如下:
void Update()
{
screenpos = Camera.main.WorldToScreenPoint(cube.position);
Tip.transform.position = screenpos;
}
此种方法必须在screenmode=screemspace-Overlay模式下。即默认模式下,unity令屏幕坐标绑定在世界坐标原点,屏幕坐标的单位是像素,pixel。即1像素=1米。所以在默认模式下就可以将屏幕坐标直接赋值给ui的世界坐标。
默认模式下,世界坐标转换成屏幕坐标返回的screenpos中,x y即为在屏幕上能正确显示的世界坐标xy。z值为摄像机和世界坐标在z分量上的距离。