设置像素颜色块。
该函数接收一个 Color32 数组,
然后更改纹理的整个 Mip 级别的像素颜色。调用 Apply 可实际将更改的像素
上传到显卡。colors
数组是一个平展 2D 数组,其中像素是从左到右、
从下到上排列(即,逐行排列)的。数组大小必须至少为所用 Mip 级别的宽度乘以高度。
默认 Mip 级别为零(基础纹理),在这种情况下,其大小只是该纹理的大小。
在一般情况下,Mip 级别的大小为 mipWidth=max(1,width>>miplevel)
,
高度也是如此。
This function works only on RGBA32
, ARGB32
texture formats.
For other formats SetPixels32
is ignored.
The texture also has to have read/write enabled flag set in the texture import settings.
Using SetPixels32
is faster than calling SetPixels. For an even faster pixel data
access, use GetRawTextureData that returns a NativeArray
.
See Also: SetPixels, GetPixels32, GetPixels, Apply, GetRawTextureData, LoadRawTextureData, mipmapCount.
using UnityEngine;
public class Example : MonoBehaviour { // This script will tint texture's mip levels in different colors // (1st level red, 2nd green, 3rd blue). You can use it to see // which mip levels are actually used and how.
void Start() { Renderer rend = GetComponent<Renderer>();
// duplicate the original texture and assign to the material Texture2D texture = (Texture2D)Instantiate(rend.material.mainTexture); rend.material.mainTexture = texture;
// colors used to tint the first 3 mip levels var colors = new Color32[3]; colors[0] = Color.red; colors[1] = Color.green; colors[2] = Color.blue; var mipCount = Mathf.Min(3, texture.mipmapCount);
// tint each mip level for (var mip = 0; mip < mipCount; ++mip) { var cols = texture.GetPixels32(mip); for (var i = 0; i < cols.Length; ++i) { cols[i] = Color32.Lerp(cols[i], colors[mip], 0.33f); } texture.SetPixels32(cols, mip); }
// actually apply all SetPixels32, don't recalculate mip levels texture.Apply(false); } }
设置像素颜色块。
该函数为上面的 SetPixels32
的扩展版本;
它不修改整个 Mip 级别,而只修改从 x,y 开始的 blockWidth
x blockHeight
区域。
colors
数组的大小必须为 blockWidth*blockHeight,
并且修改后的块必须适合使用的 Mip 级别。