Cubemap.GetPixelData
Declaration
public NativeArray<T> GetPixelData(int mipLevel, CubemapFace face);Параметры
| Параметр | Описание |
|---|---|
| mipLevel | Уровень mipmap для чтения. Диапазон 0 до текстуры Texture.mipmapCount. Значение по умолчанию 0. |
| лицо | CubemapFace для чтения. |
Возвращаемое значение
NativeArray<T> Основной массив, который указывает непосредственно на буфер данных текстуры в памяти CPU.
Описание
Получает необработанные данные из текстуры.
Этот метод возвращает NativeArray<T0> который указывает непосредственно на данные текстуры на CPU и имеет размер уровня mipmap. Массив не содержит копию данных, поэтому GetPixelData не выделяет памяти.
Например, если текстура имеет размер 16 × 16 пикселей и формат RGBA32, и вы установили mipLevel до 1, метод возвращает массив с 64 элементами (8 × 8 пикселей) и размером 256 байт, если вы используете Color32 для T (4 байта на пиксель). Вы можете использовать экспериментальный GraphicsFormatUtility.ComputeMipmapSize API для вычисления размера уровня mipmap.
Обычно структура используется для T который соответствует структуре пикселя в текстуре, например, Color32 если формат текстуры использует RGBA пикселей в 32-битном формате, например TextureFormat.RGBA32.
Вы можете читать и записывать в возвращенный массив, чтобы получить и изменить данные непосредственно в памяти CPU. Если вы записываете в массив, то затем вы должны вызвать Apply метод загрузки текстуры на GPU.
Используйте возвращенный массив немедленно. Если вы сохраняете массив и используете его позже, он может не указывать на правильное место в памяти, если текстура была изменена или обновлена.
Если вы используете маленький тип для T такие как byte, GetPixelData может не сработать, поскольку NativeArray превышает максимальную длину (Int32.MaxValue). Чтобы этого избежать, используйте более крупный тип или структуру.GetPixelData бросает исключение, когда оно не срабатывает.
Дополнительные ресурсы: Apply, SetPixels, GetPixelData.
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); } }