colors | 要指定的像素颜色数组(一幅展平为 1D 数组的 2D 图像)。 |
miplevel | 要写入的纹理的 Mip 级别。 |
设置像素颜色块。
该函数接收一个颜色数组,
然后更改纹理的整个 Mip 级别的像素颜色。调用 Apply 可实际将更改的像素
上传到显卡。colors
数组是一个平展 2D 数组,其中像素是从左到右、
从下到上排列(即,逐行排列)的。数组大小必须至少为所用 Mip 级别的宽度乘以高度。
默认 Mip 级别为零(基础纹理),在这种情况下,其大小只是该纹理的大小。
在一般情况下,Mip 级别的大小为 mipWidth=max(1,width>>miplevel)
,
高度也是如此。
该函数仅适用于 RGB24
、RGB24
、RGB24
和 Alpha8
纹理格式。
对于其他格式,忽略 /SetPixels/。
该纹理还必须在导入设置中设置了 Is Readable 标志。
使用 SetPixels
可比反复调用 SetPixel 更快,尤其是
对于较大纹理而言。此外,SetPixels
还可访问单独的多级渐进纹理级别。
另请参阅:GetPixels、SetPixels32、Apply、LoadRawTextureData、mipmapCount。
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);
}
}
设置像素颜色块。
该函数为上面的 SetPixels
的扩展版本;
它不修改整个 Mip 级别,而只修改从 x,y 开始的 blockWidth
x blockHeight
区域。
colors
数组的大小必须为 blockWidth*blockHeight,
并且修改后的块必须适合使用的 Mip 级别。