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

Texture2D.LoadRawTextureData

Declaration

public void LoadRawTextureData(byte[] data);
public void LoadRawTextureData(NativeArray<T> data);
public void LoadRawTextureData(IntPtr data, int size);

Параметры

Параметр Описание
данные Массив данных для использования.
размер Размер данных в байтах.

Описание

Устанавливает необработанные данные всей текстуры в память CPU.

Этот метод устанавливает данные пикселей для текстуры в памяти CPU. Texture.isReadable должны быть true, и вы должны вызвать Apply после LoadRawTextureData, чтобы загрузить измененные пиксели в GPU.

. Вы также можете использовать следующие команды для записи текстуры:

  • Texture2D.SetPixelData, которые можно использовать для установки уровня mipmap вместо всей текстуры.
  • GetRawTextureData, который возвращает NativeArray, в который можно записывать, и может быть быстрее, потому что он избегает копирования памяти.

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

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

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

Дополнительные ресурсы: SetPixels, SetPixels32, SetPixelData, Apply, GetRawTextureData, ImageConversion.LoadImage.

using UnityEngine;

public class ExampleScript : MonoBehaviour { public void Start() { // Create a 16 x 16 texture with PVRTC RGBA4 format and fill it with raw PVRTC bytes. Texture2D tex = new Texture2D(16, 16, TextureFormat.PVRTC_RGBA4, false);

// Raw PVRTC4 data for a 16 x 16 texture. // This format is four bits per pixel, so the data should be 128 (16 x 16 / 2) bytes in size. // The texture encoded here is mostly green with some angular blue and red lines. byte[] pvrtcBytes = new byte[] { 0x30, 0x32, 0x32, 0x32, 0xe7, 0x30, 0xaa, 0x7f, 0x32, 0x32, 0x32, 0x32, 0xf9, 0x40, 0xbc, 0x7f, 0x03, 0x03, 0x03, 0x03, 0xf6, 0x30, 0x02, 0x05, 0x03, 0x03, 0x03, 0x03, 0xf4, 0x30, 0x03, 0x06, 0x32, 0x32, 0x32, 0x32, 0xf7, 0x40, 0xaa, 0x7f, 0x32, 0xf2, 0x02, 0xa8, 0xe7, 0x30, 0xff, 0xff, 0x03, 0x03, 0x03, 0xff, 0xe6, 0x40, 0x00, 0x0f, 0x00, 0xff, 0x00, 0xaa, 0xe9, 0x40, 0x9f, 0xff, 0x5b, 0x03, 0x03, 0x03, 0xca, 0x6a, 0x0f, 0x30, 0x03, 0x03, 0x03, 0xff, 0xca, 0x68, 0x0f, 0x30, 0xaa, 0x94, 0x90, 0x40, 0xba, 0x5b, 0xaf, 0x68, 0x40, 0x00, 0x00, 0xff, 0xca, 0x58, 0x0f, 0x20, 0x00, 0x00, 0x00, 0xff, 0xe6, 0x40, 0x01, 0x2c, 0x00, 0xff, 0x00, 0xaa, 0xdb, 0x41, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe8, 0x40, 0x01, 0x1c, 0x00, 0xff, 0x00, 0xaa, 0xbb, 0x40, 0xff, 0xff, };

// Load data into the texture and upload it to the GPU. tex.LoadRawTextureData(pvrtcBytes); tex.Apply();

// Assign the texture to this GameObject's material. GetComponent<Renderer>().material.mainTexture = tex; } }