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);
}
Unity针对某个UI界面元素局部截图
猜你喜欢
转载自blog.csdn.net/zouxin_88/article/details/127861129
今日推荐
周排行