版本: Unity 6 (6000.0)
语言英语
  • C#

Texture2D.SetPixels

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们确实阅读用户提出的每项更改建议,并在适用情况下进行更新。

关闭

提交失败

由于某种原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

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

参数

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 与以下纹理格式一起使用

  • Alpha8
  • ARGB32
  • ARGB4444
  • BGRA32
  • R16
  • R16_SIGNED
  • R8
  • R8_SIGNED
  • RFloat
  • RG16
  • RG16_SIGNED
  • RG32
  • RG32_SIGNED
  • RGB24
  • RGB24_SIGNED
  • RGB48
  • RGB48_SIGNED
  • RGB565
  • RGB9e5Float
  • RGBA32
  • RGBA32_SIGNED
  • RGBA4444
  • RGBA64
  • RGBA64_SIGNED
  • RGBAFloat
  • RGBAHalf
  • RGFloat
  • RGHalf
  • RHalf

对于所有其他格式,SetPixels 失败。当SetPixels 失败时,Unity 会抛出异常。

其他资源:GetPixelsSetPixels32SetPixelDataApplyGetRawTextureDataLoadRawTextureDatamipmapCount

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); } }

声明

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

参数

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级别。