Объявление
public NativeArrayВозвращает
NativeArray
Описание
Получить необработанные данные из текстуры для чтения или записи.
Эта функция возвращает прямое «представление» данных пикселей текстуры в виде Unity.Collections.NativeArray
.
Данные содержат всю текстуру в соответствии с ее шириной, высотой, данными формата и mipmapCount. MIP-карты располагаются в памяти, начиная с самой большой, сразу за ней следуют данные меньшего уровня. Например, текстура 16 x 8 в формате RGBA32 без мипмапов создаст массив размером 512 байт (16 x 8 x 4) или массив из 128 элементов, если в качестве типа используетсяColor32.
Вы можете читать и записывать в возвращаемый массив. Если вы записываете в него, вы должны вызвать метод Apply, чтобы загрузить текстуру в GPU.
GetRawTextureData не выделяет память; возвращенный NativeArray
напрямую указывает на буфер данных системной памяти текстуры. Таким образом, это самый быстрый способ доступа к данным пикселей.
Примечание. Возвращаемый массив может стать недействительным (т. е. он больше не указывает на действительную память), если после вызова этого метода с текстурой произошли изменения или загрузки. Поэтому рекомендуется использовать этот метод для получения данных и их немедленного использования или изменения. Не следует сохранять возвращенный массив для последующего использования.
Смотрите так же: 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 точно соответствует структуре Color32
var data = texture.GetRawTextureData<Color32>();
// заполнить текстурные данные простым узором
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);
}
}
// загружаем в GPU
texture.Apply();
}
}
Объявление
public byte[] GetRawTextureData();Возвращает
byte[] Необработанные данные текстуры в виде массива байтов.
Описание
Получить необработанные данные из текстуры.
Эта функция возвращает необработанные данные текстуры в виде массива байтов, который затем можно использовать с Texture2D.LoadRawTextureData. Это позволяет сериализовать и загружать текстуры любого формата (включая сжатые), а затем загружать их обратно в текстуру.
Обратите внимание, что эта функция возвращает копию данных текстуры в системной памяти Unity, поэтому Texture.isReadable должно быть true
. Эта нестандартная функция возвращает копию данных. Если вам не нужна копия или вы хотите изменить данные напрямую, используйте шаблонную версию этой функции. Шаблонная функция работает быстрее, поскольку не создает копии.
Также обратите внимание, что копия системной памяти может не совпадать с тем, что находится в данных текстуры графического процессора в данный момент. Например, после вызова SetPixels копия системной памяти уже изменена, но копия графического процессора будет соответствовать только после вызова Apply(). В некоторых случаях Graphics.CopyTexture может копироваться только сторона текстуры графического процессора (например, копирование из RenderTexture в Texture2D), и это не будет отражено в содержимом GetRawTextureData.< /p>
using UnityEngine;
class CopyTexture : MonoBehaviour
{
// Исходная текстура.
Texture2D tex;
void Start()
{
// Создайте копию текстуры, прочитав и применив необработанные данные текстуры.
Texture2D texCopy = new Texture2D(tex.width, tex.height, tex.format, tex.mipmapCount > 1);
texCopy.LoadRawTextureData(tex.GetRawTextureData());
texCopy.Apply();
}
}