Unity 6.3
0 онлайн 21 гостей 3 в системе
Вход

CubemapArray.GetPixelData

Declaration

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

Параметры

Параметр Описание
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, SetPixels32, GetPixelData.

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