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

Texture2D.SetPixel

建议更改

成功!

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

关闭

提交失败

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

关闭

取消

声明

public void SetPixel(int x, int y, Color color, int mipLevel = 0);

参数

x 要设置的像素的 x 坐标。范围为 0 到(纹理宽度 - 1)。
y 要设置的像素的 y 坐标。范围为 0 到(纹理高度 - 1)。
color 要设置的颜色。
mipLevel 要写入的 mipmap 级别。范围为 0 到纹理的 Texture.mipmapCount。默认值为 0

描述

设置坐标 (x,y) 处的像素颜色。

此方法设置 CPU 内存中纹理的像素数据。 Texture.isReadable 必须为 true,并且必须在 SetPixel 后调用 Apply 以将更改的像素上传到 GPU。

Apply 是一个代价高昂的操作,因为它会复制纹理中的所有像素,即使您只更改了一些像素,因此在调用它之前尽可能多地更改像素。

SetPixel 可能比某些其他纹理方法慢,因为它会将 Color 结构转换为纹理使用的格式。要更快地设置像素数据,请改用 SetPixelData

左下角为 (0, 0)。如果像素坐标超出纹理的尺寸,Unity 会根据纹理的 TextureWrapMode 对其进行钳制或重复。

如果需要获取大量像素,使用 SetPixels32 可能更快。

您可以将 SetPixel 与以下 纹理格式 一起使用

  • 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

对于所有其他格式,Unity 会忽略 SetPixel

其他资源:SetPixelsSetPixelDataGetPixelApply

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { void Start() { Texture2D texture = new Texture2D(128, 128); GetComponent<Renderer>().material.mainTexture = texture;

for (int y = 0; y < texture.height; y++) { for (int x = 0; x < texture.width; x++) { Color color = ((x & y) != 0 ? Color.white : Color.gray); texture.SetPixel(x, y, color); } } texture.Apply(); } }