public void SetPixels (Color[] colors, int miplevel= 0);

参数

colors要指定的像素颜色数组(一幅展平为 1D 数组的 2D 图像)。
miplevel要写入的纹理的 Mip 级别。

描述

设置像素颜色块。

该函数接收一个颜色数组, 然后更改纹理的整个 Mip 级别的像素颜色。调用 Apply 可实际将更改的像素 上传到显卡。

colors 数组是一个平展 2D 数组,其中像素是从左到右、 从下到上排列(即,逐行排列)的。数组大小必须至少为所用 Mip 级别的宽度乘以高度。 默认 Mip 级别为零(基础纹理),在这种情况下,其大小只是该纹理的大小。 在一般情况下,Mip 级别的大小为 mipWidth=max(1,width>>miplevel), 高度也是如此。

该函数仅适用于 RGB24RGB24RGB24Alpha8 纹理格式。 对于其他格式,忽略 /SetPixels/。 该纹理还必须在 texture import settings 中设置 read/write enabled 标志。

使用 SetPixels 可比反复调用 SetPixel 快得多,尤其是 对于较大纹理而言。此外,SetPixels 还可访问单独的 Mipmap 级别。为了更快进行像素数据 访问,请使用返回 NativeArrayGetRawTextureData

另请参阅:GetPixelsSetPixels32ApplyGetRawTextureDataLoadRawTextureDatamipmapCount

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { void Start() { Renderer rend = GetComponent<Renderer>();

// duplicate the original texture and assign to the material Texture2D texture = Instantiate(rend.material.mainTexture) as Texture2D; rend.material.mainTexture = texture;

// colors used to tint the first 3 mip levels Color[] colors = new Color[3]; colors[0] = Color.red; colors[1] = Color.green; colors[2] = Color.blue; int mipCount = Mathf.Min(3, texture.mipmapCount);

// tint each mip level for (int mip = 0; mip < mipCount; ++mip) { Color[] cols = texture.GetPixels(mip); for (int i = 0; i < cols.Length; ++i) { cols[i] = Color.Lerp(cols[i], colors[mip], 0.33f); } texture.SetPixels(cols, mip); } // actually apply all SetPixels, don't recalculate mip levels texture.Apply(false); } }

public void SetPixels (int x, int y, int blockWidth, int blockHeight, Color[] colors, int miplevel= 0);

描述

设置像素颜色块。

该函数为上面的 SetPixels 的扩展版本; 它不修改整个 Mip 级别,而只修改从 x,y 开始的 blockWidth x blockHeight 区域。 colors 数组的大小必须为 blockWidth*blockHeight, 并且修改后的块必须适合使用的 Mip 级别。