版本:Unity 6 (6000.0)
语言简体中文
  • C#

CubemapArray.GetPixelData

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们会阅读用户建议的每项更改,并在适用时进行更新。

关闭

提交失败

您的建议更改由于某种原因而无法提交。请在几分钟后<a>重试</a>。感谢您花时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换至手册

声明

public NativeArray<T> GetPixelData(int mipLevel, CubemapFace face, int element);

参数

mipLevel 要读取的 mipmap 级别。范围为 0 到纹理的 Texture.mipmapCount。默认值为 0
face 要读取的 CubemapFace
element 要读取的数组切片。

返回值

NativeArray<T> 指向 CPU 内存中纹理的数据缓冲区的本机数组。

描述

从纹理获取原始数据。

此方法返回一个 NativeArray<T0>,该数组直接指向 CPU 上纹理的数据,并且具有 mipmap 级别的大小。该数组不包含数据的副本,因此 GetPixelData 不会分配任何内存。

例如,如果切片为 16 × 16 像素和 RGBA32 格式,并且将 mipLevel 设置为 1,如果对 T 使用 Color32(每个像素 4 个字节),则该方法会返回一个包含 64 个元素(8 × 8 像素)且大小为 256 字节的数组。可以使用实验性 GraphicsFormatUtility.ComputeMipmapSize API 来计算 mipmap 级别的大小。

通常会对 T 使用与纹理中的像素结构相匹配的结构,例如,如果纹理格式使用 32 位格式的 RGBA 像素(如 TextureFormat.RGBA32),则使用 Color32

你可以读取和写入返回的数组以获取和更改 CPU 内存中的数据。如果要写入该数组,则必须调用 Apply 方法来将纹理上传到 GPU。

立即使用返回的数组。如果存储该数组并在之后使用,如果纹理已被修改或更新,则它可能不会指向正确的内存位置。

如果你使用 byteGetPixelDataT 的较小类型可能会失败,因为 NativeArray 会超出最大长度 (Int32.MaxValue)。为避免这种情况,请使用较大的类型或结构。

GetPixelData 在失败时会引发异常。

其他资源:ApplySetPixelsSetPixels32GetPixelData

using UnityEngine;

public class ExampleScript : MonoBehaviour { public void Start() {

// Create a cubemap array var m_CubemapArray = new CubemapArray(16, 3, TextureFormat.RGBA32, true);

// Use GetPixelData to get an array that points to mipmap level 1, +z face var mip1Face4element1 = m_CubemapArray.GetPixelData<Color32>(1, CubemapFace.PositiveZ, 1);

// Fill pixels in mipmap level 1 with white for (int i = 0; i < mip1Face4element1.Length; i++) { mip1Face4element1[i] = new Color32(255, 255, 255, 255); }

// Copy the texture changes to the GPU m_CubemapArray.Apply(false); } }