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

参数

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

描述

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

This copies a rectangular pixel area from the currently active RenderTexture or the view (specified by the source parameter) into the position defined by destX and destY. Both coordinates use pixel space - (0,0) is lower left.

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; } } }