data | 要使用的数组数据。 |
size | 数据的字节大小。 |
设置整个纹理的原始数据在 CPU 内存中。
此方法为纹理在 CPU 内存中设置像素数据。 Texture.isReadable 必须为 true
,并且您必须在调用 LoadRawTextureData
后调用 Apply 将更改的像素上传到 GPU。
您还可以使用以下方法写入纹理
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; } }