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

Texture2D.GetRawTextureData

Declaration

public NativeArray<T> GetRawTextureData();

Возвращаемое значение

NativeArray<T> Основной массив, который указывает непосредственно на буфер данных текстуры в памяти CPU.

Описание

Получает необработанные данные из текстуры в виде массива, указывающего на память.

Эта версия GetRawTextureData метод возвращает a NativeArray<T0> который указывает непосредственно на данные текстуры на CPU. Массив не содержит копию данных, так что GetRawTextureData Для возврата копии используйте версию, возвращающую копию файла, а не копию файла. byte[] массив вместо.

Вы также можете использовать GetPixelData. Вы можете использовать GetPixelData чтобы получить уровень mipmap вместо всей текстуры.

Обычно структура используется для T который соответствует структуре пикселя в текстуре, например, Color32 если формат текстуры использует RGBA пикселей в 32-битном формате, например TextureFormat.RGBA32.

Возвращаемый массив содержит всю текстуру в соответствии с ее шириной, высотой, format и mipmapCount. Например, если текстура имеет размер 16 × 8 пикселей и формат RGBA32 без mipmaps, метод возвращает массив с размером 512 байт (16 × 8 × 4 байт) и содержит 128 элементов, если вы используете Color32 для T (4 байта на пиксель). Вы можете использовать экспериментальный GraphicsFormatUtility.ComputeMipmapSize API для вычисления размера уровня mipmap.

Массив начинается с уровня mipmap 0.

Вы можете читать и записывать в возвращенный массив, чтобы получить и изменить данные непосредственно в памяти CPU. Если вы записываете в массив, то затем вы должны вызвать Apply метод загрузки текстуры на GPU.

Используйте возвращенный массив немедленно. Если вы сохраняете массив и используете его позже, он может не указывать на правильное место в памяти, если текстура была изменена или обновлена.

Если вы используете маленький тип для T такие как byte, GetRawTextureData может не сработать, поскольку NativeArray превышает максимальную длину (Int32.MaxValue). Чтобы этого избежать, используйте более крупный тип или структуру.

GetRawTextureData бросает исключение, когда оно не срабатывает.

Дополнительные ресурсы: Apply, SetPixels, SetPixels32, LoadRawTextureData, GetPixelData.

using UnityEngine;

public class ExampleScript : MonoBehaviour { void Start() { var texture = new Texture2D(128, 128, TextureFormat.RGBA32, false); GetComponent<Renderer>().material.mainTexture = texture;

// RGBA32 texture format data layout exactly matches Color32 struct var data = texture.GetRawTextureData<Color32>();

// fill texture data with a simple pattern Color32 orange = new Color32(255, 165, 0, 255); Color32 teal = new Color32(0, 128, 128, 255); int index = 0; for (int y = 0; y < texture.height; y++) { for (int x = 0; x < texture.width; x++) { data[index++] = ((x & y) == 0 ? orange : teal); } } // upload to the GPU texture.Apply(); } }

Declaration

public byte[] GetRawTextureData();

Возвращаемое значение

byte[] Байтовый массив, содержащий необработанные данные текстуры.

Описание

Получает необработанные данные из текстуры в виде копии.

Эта версия GetRawTextureData метод возвращает копию необработанных данных текстуры на CPU. Texture.isReadable должно быть true.

Если вам не нужна копия или если вы хотите изменить данные напрямую, используйте версию этой функции, которая возвращает NativeArray, или Texture2D.GetPixelData.

Вы можете использовать возвращенный массив с LoadRawTextureData. Это позволяет серийнизировать и загружать текстуры любого формата, включая сжатые текстуры, и загружать данные в текстуру позже.

Текстура CPU может не совпадать с текстурой GPU, если вы использовали такой метод, как Graphics.CopyTexture который обновляет только текстуры GPU, поэтому текстура CPU не синхронизирована.

Максимальный размер возвращаемого массива равен 2 гигабайтам, поскольку массивы C# имеют максимум 2 миллиарда элементов. Если вам нужно больше 2 гигабайт данных, используйте версию этой функции, которая возвращает NativeArray, и использование Color32 для T или структуру, соответствующую формату текстуры.

GetRawTextureData бросает исключение, когда оно не срабатывает.

using UnityEngine;

class CopyTexture : MonoBehaviour { // the source texture. Texture2D tex;

void Start() { // Create a copy of the texture by reading and applying the raw texture data. Texture2D texCopy = new Texture2D(tex.width, tex.height, tex.format, tex.mipmapCount > 1); texCopy.LoadRawTextureData(tex.GetRawTextureData()); texCopy.Apply(); } }