UI控件位置转换
如图获得GameObject控件及其子控件相对于Canvas的坐标,需要使用以下函数
//将屏幕空间点转换为位于矩形平面上的RectTransform的局部空间中的位置。
//rect参数是是想要获取的相对控件的坐标,即Canvas控件
//screenPoint参数是控件世界坐标转换为屏幕坐标
//cam参数是与Canvas相关联的摄像机。
//对于画布中的RectTransform设置为Screen Space - Overlay模式,cam参数应该为null。
//当从提供PointerEventData对象的事件处理程序中使用ScreenPointToLocalPointInRectangle时,
RectTransformUtility.ScreenPointToLocalPointInRectangle (
RectTransform rect,
Vector2 screenPoint,
Camera cam,
out Vector2 localPoint)
创建Script,添加到GameObject物体上,代码如下
Camera camera = GameObject.Find("Main Camera").GetComponent<Camera>();
RectTransform canvas = GameObject.Find("Canvas").GetComponent<RectTransform>();
Vector2 localPos = Vector3.zero;
RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas,
camera.WorldToScreenPoint(transform.position), camera, out localPos);
Debug.Log(localPos);
foreach (Transform trans in transform)
{
RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas,
camera.WorldToScreenPoint(trans.position), camera, out localPos);
Debug.Log(localPos);
}
transform.position 物体的世界坐标,camera.WorldToScreenPoint 世界坐标转换为屏幕坐标。