Объявление
public void SetPixels32(Color32[] colors, int miplevel = 0);Параметры
colors | Значения пикселей для назначения текстуре. |
miplevel | Mip-уровень Текстуры, переданный в значениях пикселей. |
Описание
Установите блок цветов пикселей.
Эта функция принимает массив Color32 и изменяет цвета пикселей всего мип-уровня текстуры. Вызовите Apply, чтобы фактически загрузить измененные пиксели на видеокарту.
Массив colors
– это сглаженный двумерный массив, в котором пиксели располагаются слева направо и снизу вверх (т. е. ряд за рядом). Размер массива должен быть не меньше ширины на высоту используемого мип-уровня. Уровень MIP по умолчанию равен нулю (базовая текстура), и в этом случае размер равен размеру текстуры. В общем случае размер мип-уровня равен mipWidth=max(1,width>>miplevel)
и аналогично для высоты.
Эта функция работает только с (большинством) несжатых форматов текстур. Если формат текстуры отличается от RGBA32
, ARGB32
или любого другого 8-битного/канального формата, эта функция преобразует данные. Это дополнительное преобразование замедляет работу функции. Для других форматов SetPixels32
не работает. Texture.isReadable должно быть true
.
Использование SetPixels32
выполняется быстрее, чем вызов SetPixels. Для еще более быстрого доступа к пиксельным данным используйте GetRawTextureData, который возвращает NativeArray
.
SetPixels32
создает исключение в случае сбоя.
Смотрите так же: SetPixels, SetPixelData, GetPixels32, GetPixels, Apply, GetRawTextureData, LoadRawTextureData, mipmapCount.
using UnityEngine;
public class Example : MonoBehaviour
{
// Этот скрипт будет окрашивать мип-уровни текстуры в разные цвета
// (1-й уровень красный, 2-й зеленый, 3-й синий). Вы можете использовать его, чтобы увидеть
// какие мип-уровни реально используются и как.
void Start()
{
Renderer rend = GetComponent<Renderer>();
// duplicate the original texture and assign to the material
Texture2D texture = (Texture2D)Instantiate(rend.material.mainTexture);
rend.material.mainTexture = texture;
// colors used to tint the first 3 mip levels
var colors = new Color32[3];
colors[0] = Color.red;
colors[1] = Color.green;
colors[2] = Color.blue;
var mipCount = Mathf.Min(3, texture.mipmapCount);
// tint each mip level
for (var mip = 0; mip < mipCount; ++mip)
{
var cols = texture.GetPixels32(mip);
for (var i = 0; i < cols.Length; ++i)
{
cols[i] = Color32.Lerp(cols[i], colors[mip], 0.33f);
}
texture.SetPixels32(cols, mip);
}
// actually apply all SetPixels32, don't recalculate mip levels
texture.Apply(false);
}
}
Объявление
public void SetPixels32(int x, int y, int blockWidth, int blockHeight, Color32[] colors, int miplevel = 0);Описание
Установите блок цветов пикселей.
Эта функция является расширенной версией SetPixels32
выше; он не изменяет весь уровень MIP, а изменяет только blockWidth
на область blockHeight
, начиная с x,y. Массив colors
должен иметь размер blockWidth*blockHeight, а измененный блок должен соответствовать используемому уровню MIP.