Texture2D.SetPixel
Declaration
public void SetPixel(int x, int y, Color color, int mipLevel = 0);Параметры
| Параметр | Описание |
|---|---|
| x | Координаты x пикселя, который нужно установить. Диапазон — от 0 до (ширина текстуры — 1). |
| y | Координаты y пикселя для установки. Диапазон — от 0 до (высота текстуры — 1). |
| цвет | Цвет для установки. |
| mipLevel | Уровень mipmap для записи. Диапазон 0 через текстуру Texture.mipmapCount. Значение по умолчанию 0. |
Описание
Задает цвет пикселей в координатах (x,y).
Этот метод устанавливает пиксельные данные для текстуры в памяти CPU. Texture.isReadable должно быть true, и вы должны вызвать Apply после SetPixel для загрузки измененных пикселей в GPU.
Apply является дорогостоящей операцией, потому что она копирует все пиксели текстуры, даже если вы изменили только некоторые пиксели, так что измените как можно больше пикселей, прежде чем вызовёте ее.SetPixel может быть медленнее, чем некоторые другие методы текстуры, потому что он преобразует Color структуру в формат, используемый текстурой. Чтобы задать данные пикселей быстрее, используйте SetPixelData вместо этого.
Если координата пикселя находится вне размеров текстуры, 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.
Дополнительные ресурсы: SetPixels, SetPixelData, GetPixel, Apply.
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(); } }