source | 要读取的视图的矩形区域。将从当前渲染目标读取像素。 |
destX | 纹理中的水平像素位置,用于放置读取的像素。 |
destY | 纹理中的垂直像素位置,用于放置读取的像素。 |
recalculateMipMaps | 读取后是否应重新计算纹理的多级渐进纹理? |
将屏幕像素读取到保存的纹理数据中。
这会将当前处于激活状态的 RenderTexture 或视图(由 source
参数指定)中的矩形像素区域复制到
由 destX
和 destY
定义的位置。两个坐标都使用像素空间 - (0,0) 为左下方。
如果 recalculateMipMaps
设置为 true,则还将更新纹理的 Mip 贴图。如果 recalculateMipMaps
设置为 false,则必须调用 Apply 对其进行重新计算。
当渲染目标具有类似的格式时(例如,通常的 32 或 16 位渲染纹理),该函数适用于 ARGB32
、ARGB32
和 RGB24
纹理格式。
此外,该函数还支持从 HDR 渲染目标(ARGBFloat 或 ARGBHalf 渲染纹理格式)读入 HDR 纹理格式(RGBAFloat 或 RGBAHalf)。
The texture also has to have read/write enabled flag set in the texture import settings.
// 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。