Объявление
public void SetPixels(Color[] colors, int miplevel = 0);Параметры
colors | Массив цветов пикселей для назначения (двумерное изображение, сведенное к одномерному массиву). |
miplevel | Мип-уровень текстуры для записи. |
Описание
Установите блок цветов пикселей.
Эта функция принимает массив цветов и изменяет цвета пикселей всего мип-уровня текстуры. Вызовите Apply, чтобы фактически загрузить измененные пиксели на видеокарту.
Массив colors
– это сглаженный двумерный массив, в котором пиксели располагаются слева направо и снизу вверх (т. е. ряд за рядом). Размер массива должен быть не меньше ширины на высоту используемого мип-уровня. Уровень MIP по умолчанию равен нулю (базовая текстура), и в этом случае размер равен размеру текстуры. В общем случае размер мип-уровня равен mipWidth=max(1,width>>miplevel)
Эта функция работает только с (большинством) несжатых форматов текстур. Для других форматов SetPixels
не работает. Texture.isReadable должно быть true
.
Использование SetPixels
может быть намного быстрее, чем повторный вызов SetPixel, особенно для больших текстур. Кроме того, SetPixels
может получить доступ к отдельным уровням MIP-карт. Для еще более быстрого доступа к пиксельным данным используйте GetRawTextureData, который возвращает NativeArray
.
SetPixels
создает исключение в случае сбоя.
Смотрите так же: 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;
// colors used to tint the first 3 mip levels
Color[] colors = new Color[3];
colors[0] = Color.red;
colors[1] = Color.green;
colors[2] = Color.blue;
int mipCount = Mathf.Min(3, texture.mipmapCount);
// tint each mip level
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);
}
// actually apply all SetPixels, don't recalculate mip levels
texture.Apply(false);
}
}
Объявление
public void SetPixels(int x, int y, int blockWidth, int blockHeight, Color[] colors, int miplevel = 0);Параметры
miplevel | Мип-уровень текстуры для записи. |
Описание
Установите блок цветов пикселей.
Эта функция является расширенной версией SetPixels
выше; это не меняет всего
mip, но изменяет только blockWidth
на область blockHeight
, начиная с x,y. Массив colors
должен иметь размер blockWidth*blockHeight, а измененный блок должен соответствовать используемому уровню MIP.