colors | 要使用的像素颜色数组。这是一个展平为一维数组的二维图像。 |
miplevel | 要将 colors 写入的 Mipmap 级别。范围为纹理的 Texture.mipmapCount 从 0 开始。默认值为 0 。 |
设置整个 Mipmap 级别的像素颜色。
此方法在 CPU 内存中设置纹理的像素数据。必须将 Texture.isReadable 设置为 true
,并且必须在 SetPixels32
后调用 Apply 以将更改的像素上传到 GPU。colors
必须包含从纹理前面开始逐片切片的像素。每个切片必须包含逐行像素,从纹理的左下角开始。数组的大小必须是 Mipmap 级别的高度×宽度×深度。
一次调用 SetPixels32
通常比多次调用 SetPixel 更快,尤其是在大型纹理中。SetPixels32
可能比某些其他纹理方法慢,因为它将 Color32 结构转换为纹理使用的格式。要更快地设置像素数据,请改用 SetPixelData。
您可以将 SetPixels32
与以下 纹理格式 一起使用
对于所有其他格式,SetPixels32
都会失败。当 SetPixels32
失败时,Unity 会抛出异常。
其他资源:SetPixels、SetPixelData、GetPixels32、GetPixels、Apply、GetRawTextureData、LoadRawTextureData、mipmapCount。
using UnityEngine;
public class Example : MonoBehaviour { // This script tints a texture's mipmap levels with different colors.
void Start() { Renderer rend = GetComponent<Renderer>();
// Duplicate the original texture and assign to this GameObject's material. Texture2D texture = (Texture2D)Instantiate(rend.material.mainTexture); rend.material.mainTexture = texture;
// Create the colors to use var colors = new Color32[3]; colors[0] = Color.red; colors[1] = Color.green; colors[2] = Color.blue; var mipCount = Mathf.Min(3, texture.mipmapCount);
// For each mipmap level, use GetPixels to fetch an array of pixel data, and use SetPixels32 to fill the mipmap level with one color. 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); }
// Copy the changes to the GPU, and don't recalculate mipmap levels. texture.Apply(false); } }
x | 放置像素块的 x 坐标。范围为 0 到 (纹理宽度 - 1)。 |
y | 放置像素块的 y 坐标。范围为 0 到 (纹理高度 - 1)。 |
blockWidth | 要设置的像素块的宽度。 |
blockHeight | 要设置的像素块的高度。 |
colors | 要使用的像素颜色数组。这是一个展平为一维数组的二维图像。必须为 blockWidth x blockHeight 长度。 |
miplevel | 要将 colors 写入的 Mipmap 级别。范围为纹理的 Texture.mipmapCount 从 0 开始。默认值为 0 。 |
设置 Mipmap 级别一部分的像素颜色。
此版本的 SetPixels32
设置 Mipmap 级别的一部分,而不是整个 Mipmap 级别。