Unity 世界坐标转ui坐标

底层算法

            public static Vector2 WorldToUGUIPosition(Canvas canvas, Camera worldCamera, Vector3 worldPosition)
            {
                // 将世界坐标转换为屏幕坐标
                var screenPosition =
                    worldCamera.WorldToScreenPoint(
                        worldPosition); //RectTransformUtility.WorldToScreenPoint(camera, worldPosition);
                // 将屏幕坐标转换为 UGUI 坐标
                var uiCamera = canvas.renderMode == RenderMode.ScreenSpaceOverlay ? null : canvas.worldCamera;
                RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform,
                    screenPosition, uiCamera, out var localPoint);
                return localPoint;
            }

调用 WorldToUGUIPosition

        public static Vector2 WorldPos2UI(Vector3 worldPos)
        {
            if (Camera.main == null) return Vector2.zero;
            var uiPos = UUtil.Unity.WorldToUGUIPosition(UUIViewManager.Instance.uiCanvas, Camera.main, worldPos);
            return uiPos;
        }

调用 WorldPos2UI

UUIViewHelper.WorldPos2UI(Context.TargetTf.position);

 

posted @ 2024-11-12 11:09  减肥的程序  阅读(306)  评论(0)    收藏  举报