colors | 要使用的像素颜色数组。这是一个扁平化为一维数组的二维图像。 |
miplevel | 要写入colors 的mipmap级别。范围是0 到纹理的Texture.mipmapCount。默认值为0 。 |
设置整个mipmap级别的像素颜色。
此方法设置 CPU 内存中纹理的像素数据。 Texture.isReadable 必须为true
,并且您必须在SetPixels
后调用Apply,才能将更改后的像素上传到 GPU。
Apply 是一项昂贵的操作,因为它会复制纹理中的所有像素,即使您只更改了部分像素,因此在调用它之前,请尽可能多地更改像素。colors
必须包含按行排列的像素,从纹理的左下角开始。数组的大小必须是mipmap级别的宽度 × 高度。
通常,一次调用SetPixels
比多次调用SetPixel 更快,特别是对于大型纹理。SetPixels
可能比某些其他纹理方法慢,因为它将Color 结构转换为纹理使用的格式。为了更快地设置像素数据,请改为使用SetPixelData。
您可以将SetPixels
与以下纹理格式一起使用
对于所有其他格式,SetPixels
失败。当SetPixels
失败时,Unity 会抛出异常。
其他资源:GetPixels,SetPixels32,SetPixelData,Apply,GetRawTextureData,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;
// Create the colors to use Color[] colors = new Color[3]; colors[0] = Color.red; colors[1] = Color.green; colors[2] = Color.blue; int mipCount = Mathf.Min(3, texture.mipmapCount);
// For each mipmap level, use GetPixels to fetch an array of pixel data, and use SetPixels to fill the mipmap level with one color. 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); } // 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级别。范围是0 到纹理的Texture.mipmapCount。默认值为0 。 |
设置mipmap级别的一部分的像素颜色。
此版本的SetPixels
设置mipmap级别的一部分,而不是整个mipmap级别。