unity 截屏总结

转载与https://www.cnblogs.com/MissLi/p/8005342.html

1.针对指定的相机进行截屏

此中方式要添加yield return waitfortheEndofFrame

public Texture2D CaptureScreen(Camera came, Rect r)
  {
      RenderTexture rt = new RenderTexture((int)r.width, (int)r.height, 0);
 
      came.targetTexture = rt;
      came.Render();
 
      RenderTexture.active = rt;
      Texture2D screenShot = new Texture2D((int)r.width, (int)r.height, TextureFormat.RGB24, false);
 
      screenShot.ReadPixels(r, 0, 0);
      screenShot.Apply();
 
      came.targetTexture = null;
      RenderTexture.active = null;
      GameObject.Destroy(rt);
 
      byte[] bytes = screenShot.EncodeToPNG();
      string filename = Application.streamingAssetsPath + "/ScreenShot.png";
      System.IO.File.WriteAllBytes(filename, bytes);
 
      return screenShot;
  }

2.自定义截图的大小(包括UI)

public Texture2D CaptureScreen(Rect rect)
    {
        Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);
 
        screenShot.ReadPixels(rect, 0, 0);
 
        screenShot.Apply();
 
        byte[] bytes = screenShot.EncodeToPNG();
        string filename = Application.streamingAssetsPath + "/ScreenShot.png";
        System.IO.File.WriteAllBytes(filename, bytes);
 
        return screenShot;
    }

3.截取屏幕全屏

public void CapruerScreen()
   {
       // Application.CaptureScreenshot(Application.persistentDataPath + "ScreenShot.png", 0);//过时的方法
       ScreenCapture.CaptureScreenshot( Application.streamingAssetsPath + "/ScreenShot.png", 0);      
   }
原文地址:https://www.cnblogs.com/llstart-new0201/p/8512429.html