unity 截图适用于各分辨率
float scr;
void Start()
{
scr = Screen.width /2160.00f;//2160是我做程序时的分辨率 Screen.width为打包后机器的分辨率
}
/// <summary>
/// 区域截图
/// </summary>
/// <param name="rectT"></param>
/// <param name="ac"></param>
/// <retu rns></returns>
public IEnumerator GetScreenTexture(RectTransform rectT, Action<Texture2D> ac)
{
yield return new WaitForEndOfFrame();
Texture2D screenShot = new Texture2D((int)(rectT.rect.width * scr), (int)(rectT.rect.height * scr), TextureFormat.RGB24, true);
float x = (rectT.anchoredPosition3D.x + (Screen.width - rectT.rect.width * scr) / 2);
float y = (rectT.anchoredPosition3D.y + (Screen.height - rectT.rect.height * scr) / 2 + rectT.parent.GetComponent<RectTransform>().anchoredPosition3D.y * scr);//父物体的坐标
Debug.Log("x:" + x + ":y:" + y);
Rect position = new Rect(x, y, rectT.rect.width * scr, rectT.rect.height * scr);
Debug.Log("rect:" + position);
screenShot.ReadPixels(position, 0, 0, true);//按照设定区域读取像素;注意是以左下角为原点读取
screenShot.Apply();
ac(screenShot);
}