Unity针对某个UI界面元素局部截图

public IEnumerator DoScreenshot(RectTransform rt)
    {
        yield return new WaitForEndOfFrame();
        
        //获取四个角点
        Vector3[] corners = new Vector3[4];
        rt.GetWorldCorners(corners);

        //获取视图坐标的获围
        float xMinView = Mathf.Infinity;
        float yMinView = Mathf.Infinity;
        float xMaxView = -Mathf.Infinity;
        float yMaxView = -Mathf.Infinity;
        for (int i = 0; i < corners.Length; i++)
        {
            Vector2 ptView = Camera.main.WorldToViewportPoint(corners[i]);

            xMinView = ptView.x < xMinView ? ptView.x : xMinView;
            yMinView = ptView.y < yMinView ? ptView.y : yMinView;
            xMaxView = ptView.x > xMaxView ? ptView.x : xMaxView;
            yMaxView = ptView.y > yMaxView ? ptView.y : yMaxView;
        }

        //获取UI在屏幕上的矩形范围
        float width = Screen.width * (xMaxView - xMinView);
        float height = Screen.height * (yMaxView - yMinView);
        Rect screenRect = new Rect(Screen.width * xMinView, Screen.height * yMinView, width, height);

        //生成截图
        Texture2D screenShot = new Texture2D((int)width, (int)height, TextureFormat.RGB24, true);
        screenShot.ReadPixels(screenRect, 0, 0, true);//按照设定区域读取像素;注意是以左下角为原点读取
        screenShot.Apply();

        //保存截图
        byte[] byteArray = screenShot.EncodeToPNG();
        string file = "C:/CameraScreenShot.png";
        File.WriteAllBytes(file, byteArray);
    }

猜你喜欢

转载自blog.csdn.net/zouxin_88/article/details/127861129
今日推荐