U3D 如何计算一个UI四个角的绝对坐标

 
        //方式一,使用API获取
        var rtrans = gameObject.GetComponent<RectTransform>();
        Vector3[] worldcorners = new Vector3[4];
        rtrans.GetWorldCorners(worldcorners);

        //方式二,手动计算
        var cam = GameObject.Find("Camera").GetComponent<Camera>();
        var cam_h = 2 * cam.orthographicSize;
        var cam_w = cam_h * Screen.width / Screen.height;

        var canvasObj = GameObject.Find("Canvas");
        var canvas = canvasObj.GetComponent<Canvas>();
        var canvasScaler = canvasObj.GetComponent<CanvasScaler>();

        float screen_w = Screen.width;
        float screen_h = Screen.height;

        var pos = transform.position;
        var fw = rtrans.rect.width;
        var fh = rtrans.rect.height;

        if (canvasScaler.uiScaleMode == CanvasScaler.ScaleMode.ScaleWithScreenSize)
        {
            screen_w = canvasScaler.referenceResolution.x;
            screen_h = screen_w * Screen.height / Screen.width;
        }
        if (canvas.renderMode == RenderMode.ScreenSpaceCamera)
        {
            fw = rtrans.rect.width / screen_w * cam_w;
            fh = rtrans.rect.height / screen_h * cam_h;
        }

        float[] wcs = new float[4];

        var c1 = pos.x - fw / 2;
        var c2 = pos.x + fw / 2;
        var c3 = pos.y - fh / 2;
        var c4 = pos.y + fh / 2;

        //两种试计算得到的结果完全一样

 

posted @ 2017-06-26 17:33  时空观察者9号  阅读(489)  评论(0编辑  收藏  举报