版本:Unity 6(6000.0)
语言英语
  • C#

Cubemap.GetPixelData

建议更改

成功!

感谢你帮助我们改进 Unity 文档的质量。尽管无法接受所有提交内容,但我们确实会阅读用户提出的每项建议的更改,并在适用时进行更新。

关闭

提交失败

由于某些原因导致你的建议更改无法提交。请在几分钟内重试。感谢花时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

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

参数

mipLevel 要从中读取的 mipmap 级别。范围为0到纹理的Texture.mipmapCount。默认值为0
face 要从中读取的CubemapFace

返回

NativeArray<T>一个直接指向 CPU 内存中纹理数据缓冲区的原生数组。

描述

从纹理获取原始数据。

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

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

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

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

立即使用返回的数组。如果存储数组并稍后使用,如果纹理已修改或更新,它可能无法指向正确的存储器位置。

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

GetPixelData 在失败时会引发异常。

附加资源:ApplySetPixelsGetPixelData

using UnityEngine;

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

// Create a cubemap texture var m_Cubemap = new Cubemap(16, TextureFormat.RGBA32, true);

// Use GetPixelData to get an array that points to mipmap level 1 var mip1Face4 = m_Cubemap.GetPixelData<Color32>(1, CubemapFace.PositiveZ);

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

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