Version: 2020.2
public void ReadPixels (Rect source, int destX, int destY, bool recalculateMipMaps= true);

参数

source 要读取的视图的矩形区域。将从当前渲染目标读取像素。
destX 纹理中的水平像素位置,用于放置读取的像素。
destY 纹理中的垂直像素位置,用于放置读取的像素。
recalculateMipMaps 读取后是否应重新计算纹理的多级渐进纹理?

描述

将屏幕像素读取到保存的纹理数据中。

这会将当前处于激活状态的 RenderTexture 或视图(由 source 参数指定)中的矩形像素区域复制到 由 destXdestY 定义的位置。两个坐标都使用像素空间 - (0,0) 为左下方。

If recalculateMipMaps is set to true, the mipmaps of the texture are also updated. If recalculateMipMaps is set to false, you must call Apply to recalculate them.

当渲染目标具有类似的格式时(例如,通常的 32 或 16 位渲染纹理),该函数适用于 ARGB32ARGB32RGB24 纹理格式。 此外,该函数还支持从 HDR 渲染目标(ARGBFloat 或 ARGBHalf 渲染纹理格式)读入 HDR 纹理格式(RGBAFloat 或 RGBAHalf)。

纹理还必须在 texture import settings 中设置 read/write enabled 标志。

// Attach this script to a Camera
//Also attach a GameObject that has a Renderer (e.g. a cube) in the Display field
//Press the space key in Play mode to capture

using UnityEngine;

public class Example : MonoBehaviour { // Grab the camera's view when this variable is true. bool grab;

// The "m_Display" is the GameObject whose Texture will be set to the captured image. public Renderer m_Display;

private void Update() { //Press space to start the screen grab if (Input.GetKeyDown(KeyCode.Space)) grab = true; }

private void OnPostRender() { if (grab) { //Create a new texture with the width and height of the screen Texture2D texture = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false); //Read the pixels in the Rect starting at 0,0 and ending at the screen's width and height texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0, false); texture.Apply(); //Check that the display field has been assigned in the Inspector if (m_Display != null) //Give your GameObject with the renderer this texture m_Display.material.mainTexture = texture; //Reset the grab state grab = false; } } }

另请参阅:EncodeToPNG