Unity3d UI控件相对于Canvas坐标

    技术2024-03-27  87

    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 世界坐标转换为屏幕坐标。

    Processed: 0.010, SQL: 9