zoukankan      html  css  js  c++  java
  • 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;
    
            //两种试计算得到的结果完全一样
  • 相关阅读:
    JS调试debug
    避免使用 JS 特性 with(obj){}
    bit Byte KB MB GB TB 单位换算
    C语言中连接器介绍
    [bzoj3600]没有人的算术
    [bzoj4373]算术天才⑨与等差数列
    [bzoj4151][AMPPZ2014]The Cave
    [bzoj4906][BeiJing2017]喷式水战改
    [bzoj4908][BeiJing2017]开车
    [Codeforces Round#417 Div.2]
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/7081583.html
Copyright © 2011-2022 走看看