Описание
Координаты текстуры (UV) в третьем канале.
Этот канал также обычно называют "UV2". Он сопоставляется с семантикой шейдера `TEXCOORD2`. Когда вы вызываете Mesh.HasVertexAttribute, этот канал соответствует VertexAttribute.TexCoord2.
Unity может использовать этот канал для хранения входных значений UV, которые используются для расчета окончательных значений UV для карт освещения в реальном времени. Дополнительную информацию см. в разделе Lightmap UVs.
**Примечание.** Когда Unity визуализирует MeshRenderer, который ссылается на этот меш и использует глобальное освещение в реальном времени, Unity передает данные в поток MeshRenderer.enlightenVertexStream в `TEXCOORD2` вместо данных в этом канале. Дополнительную информацию см. в разделе Lightmap UVs.
Unity хранит UV в интервале 0-1. [0,0] представляет нижний левый угол текстуры, а [1,1] представляет верхний правый угол. Значения не зажимаются; при необходимости вы можете использовать значения ниже 0 и выше 1.
Это свойство поддерживается для обратной совместимости, но новые функции GetUVs и SetUVs позволяют получить доступ к одни и те же данные в более удобном для пользователя виде и не вызывают выделения кучи. Это свойство возвращает копию данных. Это означает, что он вызывает выделение памяти в куче. Это также означает, что для внесения изменений в исходные данные необходимо обновить копию, а затем переназначить обновленную копию сетке.
В следующем примере показано, как создать массив для хранения данных UV, присвоить ему координаты текстуры, а затем присвоить его сетке.
// Генерируем плоские координаты uv для третьего набора uv
using UnityEngine;
public class ExampleClass : MonoBehaviour
{
void Start()
{
Mesh mesh = GetComponent<MeshFilter>().mesh;
Vector3[] vertices = mesh.vertices;
Vector2[] uvs = new Vector2[vertices.Length];
for (int i = 0; i < uvs.Length; i++)
uvs[i] = new Vector2(vertices[i].x, vertices[i].z);
mesh.uv3 = uvs;
}
}
Смотрите так же: GetUVs, SetUVs, AcquireReadOnlyMeshData.