Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты
к Руководству

Mesh

класс в UnityEngine / Наследует от: Object / Реализовано в: UnityEngine.CoreModule

Описание

Класс, позволяющий создавать или изменять сетки.

Сети содержат вершины и несколько массивов треугольников.

Массивы треугольников являются индексами массивов вершин; три индекса для каждого треугольника.

Для каждой вершины может быть нормаль, восемь текстурных координат, цвет, касательная и вес кости. Они являются необязательными и могут быть удалены по желанию. Вся информация о вершинах хранится в отдельных массивах одинакового размера, поэтому, если ваша сетка имеет 10 вершин, у вас также будут массивы 10-го размера для нормалей и других атрибутов.

Концептуально все данные вершин хранятся в отдельных массивах одинакового размера. Например, если у вас есть сетка из 100 вершин и вы хотите иметь позицию, нормаль и две координаты текстуры для каждой вершины, то сетка должна иметь vertices, normals, uv и uv2, каждый из которых 100 размер. Данные для i-й вершины находятся по индексу "i" в каждом массиве.

Для каждой вершины может быть положение вершины, нормаль, касательная, цвет и до 8 текстурных координат. Координаты текстур чаще всего являются 2D-данными (Vector2), но их можно сделать Vector3 или Vector4 при необходимости. Это чаще всего используется для хранения произвольных данных в вершинах сетки, для специальных эффектов, используемых в шейдерах. Для каркасных сеток данные вершин также могут содержать boneWeights.

Данные грани сетки, то есть треугольники, из которых она состоит, представляют собой просто три индекса вершин для каждого треугольника. Например, если в сетке 10 треугольников, то массив triangles должен содержать 30 чисел, каждое из которых указывает, какую вершину использовать. Первые три элемента в массиве треугольников — это индексы вершин, составляющих этот треугольник; вторые три элемента составляют еще один треугольник и так далее.

Обратите внимание, что, хотя треугольные сетки являются наиболее распространенным вариантом использования, Unity также поддерживает другие типы топологии сетки, например линейные или точечные сетки. Для линейных сеток каждая линия состоит из двух индексов вершин и так далее. См. разделы SetIndices и Топология сетки.

Простой и расширенный API Mesh

Класс Mesh имеет два набора методов для назначения данных Mesh из скрипта. «Простой» набор методов обеспечивает основу для установки индексов, треугольников, нормалей, касательных и т. д. Эти методы включают в себя проверки правильности, например, чтобы гарантировать, что вы не передаете данные, которые могут включать индексы за пределами границ. Они представляют собой стандартный способ назначения данных Mesh из скрипта в Unity.

«Простые» методы: SetColors, SetIndices, SetNormals, SetTangents, SetTriangles, SetUVs, SetVertices, SetBoneWeights.

Существует также «расширенный» набор методов, которые позволяют вам напрямую записывать данные сетки с контролем над тем, должны ли выполняться какие-либо проверки или проверки. Эти методы предназначены для расширенных вариантов использования, требующих максимальной производительности. Они быстрее, но позволяют пропустить проверку предоставленных вами данных. Если вы используете эти методы, вы должны убедиться, что вы не предоставляете неверные данные, потому что Unity не будет проверять вас.

Расширенные методы: SetVertexBufferParams, SetVertexBufferData, SetIndexBufferParams, SetIndexBufferData, SetSubMesh, и вы можете использовать MeshUpdateFlags для управления тем, какие проверки или проверки выполняются или не выполняются. Используйте AcquireReadOnlyMeshData, чтобы сделать моментальный снимок данных Mesh только для чтения, который можно использовать с C# Jobs и Burst, и AllocateWritableMeshData с помощью ApplyAndDisposeWritableMeshData для создания мешей из C# Jobs и Burst.

Управление сетками из скрипта

Существует три общих задачи, для которых можно использовать Mesh API:

1. Построение сетки с нуля: всегда следует выполнять в следующем порядке:
а) Назначить vertices
б) Назначьте triangles.

using UnityEngine;

public class Example : MonoBehaviour { Vector3[] newVertices; Vector2[] newUV; int[] newTriangles;

void Start() { Mesh mesh = new Mesh(); GetComponent<MeshFilter>().mesh = mesh; mesh.vertices = newVertices; mesh.uv = newUV; mesh.triangles = newTriangles; } }

2. Изменение атрибутов vertices в каждом кадре:
а) Получить vertices
б) Изменить их
в) Назначьте их обратно в сетку.

using UnityEngine;

public class Example : MonoBehaviour { void Update() { Mesh mesh = GetComponent<MeshFilter>().mesh; Vector3[] vertices = mesh.vertices; Vector3[] normals = mesh.normals;

for (var i = 0; i < vertices.Length; i++) { vertices[i] += normals[i] * Mathf.Sin(Time.time); }

mesh.vertices = vertices; } }

3. Постоянное изменение треугольников и вершин сетки:
а) Вызовите Clear, чтобы начать заново
б) Назначить vertices и другие атрибуты
c) Назначить индексы у triangle.

Важно вызывать Clear перед назначением новых вершин или треугольников. Unity всегда проверяет предоставленные индексы треугольников, не ссылаются ли они на вершины, находящиеся за границами. Вызов Clear с последующим назначением вершин, а затем треугольников гарантирует, что у вас никогда не будет данных за границами.

using UnityEngine;

public class ExampleClass : MonoBehaviour { Vector3[] newVertices; Vector2[] newUV; int[] newTriangles;

void Start() { Mesh mesh = GetComponent<MeshFilter>().mesh;

mesh.Clear();

// Do some calculations... mesh.vertices = newVertices; mesh.uv = newUV; mesh.triangles = newTriangles; } }

Свойства

bindposes Позы привязки. Поза привязки в каждом индексе относится к кости с тем же индексом.
blendShapeCount Возвращает счетчик BlendShape для этой сетки.
boneWeights BoneWeight для каждой вершины в меше, который представляет 4 кости на вершину.
bounds Ограничивающий объем сетки.
colors Цвета вершин сетки.
colors32 Цвета вершин сетки.
indexFormat Формат данных буфера индекса сетки.
isReadable Возвращает true, если Mesh разрешено чтение/запись, или false, если нет.
normals Нормали сетки.
subMeshCount Количество подсетей внутри объекта Mesh.
tangents Касательные сетки.
triangles Массив, содержащий все треугольники в сетке.
uv Координаты базовой текстуры меша.
uv2 Второй набор текстурных координат меша, если он есть.
uv3 Третий набор текстурных координат меша, если он присутствует.
uv4 Четвертый набор текстурных координат меша, если он присутствует.
uv5 Пятый набор текстурных координат меша, если он присутствует.
uv6 Шестой набор текстурных координат меша, если он присутствует.
uv7 Седьмой набор текстурных координат меша, если он есть.
uv8 Восьмой набор текстурных координат меша, если он есть.
vertexAttributeCount Возвращает количество атрибутов вершин, которые имеет сетка. (Только чтение)
vertexBufferCount Получает количество буферов вершин, присутствующих в сетке. (Только чтение)
vertexCount Возвращает количество вершин в сетке (только для чтения).
vertices Возвращает копию позиций вершин или присваивает новый массив позиций вершин.

Конструкторы

Mesh Создает пустую сетку.

Публичные Методы

AddBlendShapeFrame Добавляет новую рамку плавной формы.
Clear Очищает все данные вершин и все индексы треугольников.
ClearBlendShapes Удаляет все формы перехода из сетки.
CombineMeshes Объединяет несколько сеток в эту сетку.
GetAllBoneWeights Получает вес костей для сетки.
GetBaseVertex Получает индекс базовой вершины данной подсетки.
GetBindposes Получает позы связывания сетки.
GetBlendShapeFrameCount Возвращает количество кадров для формы перехода.
GetBlendShapeFrameVertices Получает deltaVertices, deltaNormals и deltaTangents фрейма плавной формы.
GetBlendShapeFrameWeight Возвращает вес кадра плавной формы.
GetBlendShapeIndex Возвращает индекс BlendShape по заданному имени.
GetBlendShapeName Возвращает имя BlendShape по заданному индексу.
GetBonesPerVertex Количество ненулевых весов костей для каждой вершины.
GetBoneWeights Получает вес костей для сетки.
GetColors Получает цвета вершин сетки.
GetIndexCount Получает количество индексов данной подсетки.
GetIndexStart Получает начальное положение индекса в индексном буфере сетки для заданной подсети.
GetIndices Выбирает список индексов для указанной вложенной сетки.
GetNativeIndexBufferPtr Извлекает собственный (основной графический API) указатель на индексный буфер.
GetNativeVertexBufferPtr Извлекает собственный (основной графический API) указатель на буфер вершин.
GetNormals Получает нормали вершин сетки.
GetSubMesh Получить информацию о подсетке Mesh.
GetTangents Получает касательные сетки.
GetTopology Получает топологию вложенной сетки.
GetTriangles Выбирает список треугольников для указанной вложенной сетки этого объекта.
GetUVDistributionMetric Метрику распределения UV можно использовать для расчета желаемого уровня MIP-карты на основе положения камеры.
GetUVs Получает UV сетки.
GetVertexAttribute Возвращает информацию об атрибуте вершины на основе его индекса.
GetVertexAttributeDimension Получить измерение определенного атрибута данных вершины в этой сетке.
GetVertexAttributeFormat Получить формат определенного атрибута данных вершины в этой сетке.
GetVertexAttributes Получить информацию об атрибутах вершин сетки.
GetVertices Получает позиции вершин сетки.
HasVertexAttribute Проверяет, существует ли определенный атрибут данных вершины в этой сетке.
MarkDynamic Оптимизируйте сетку для частых обновлений.
MarkModified Уведомлять компоненты средства визуализации об изменении геометрии сетки.
Optimize Оптимизирует данные сетки для повышения производительности рендеринга.
OptimizeIndexBuffers Оптимизирует геометрию сетки для повышения производительности рендеринга.
OptimizeReorderVertexBuffer Оптимизирует вершины сетки для повышения производительности рендеринга.
RecalculateBounds Пересчитайте ограничивающий объем сетки по вершинам.
RecalculateNormals Пересчитывает нормали Меша из треугольников и вершин.
RecalculateTangents Пересчитывает касательные сетки по нормалям и координатам текстуры.
RecalculateUVDistributionMetric Пересчитывает метрику UV-распределения Mesh по вершинам и UV-координатам.
RecalculateUVDistributionMetrics Пересчитывает метрики UV-распределения Mesh по вершинам и UV-координатам.
SetBoneWeights Устанавливает вес костей для сетки.
SetColors Установите цвета для каждой вершины сетки.
SetIndexBufferData Устанавливает данные индексного буфера Mesh.
SetIndexBufferParams Устанавливает размер и формат индексного буфера.
SetIndices Устанавливает индексный буфер для вложенной сетки.
SetNormals Установите нормали сетки.
SetSubMesh Задает информацию о подсетке сетки.
SetSubMeshes Задает информацию, определяющую все подсетки в этой сетке, заменяя любые существующие подсетки.
SetTangents Установите касательные сетки.
SetTriangles Задает список треугольников для подсетки.
SetUVs Устанавливает UV сетки.
SetVertexBufferData Устанавливает данные буфера вершин меша.
SetVertexBufferParams Устанавливает размер и расположение буфера вершин.
SetVertices Назначает новый массив позиций вершин.
UploadMeshData Загрузить ранее выполненные модификации Mesh в графический API.

Статические Методы

AcquireReadOnlyMeshData Получает снимок данных Mesh для доступа только для чтения.
AllocateWritableMeshData Выделяет структуры данных для создания сетки с помощью заданий C#.
ApplyAndDisposeWritableMeshData Применяет данные, определенные в структурах MeshData, к объектам Mesh.

Унаследованные члены

Свойства

hideFlags Должен ли объект быть скрыт, сохранен вместе со сценой или изменен пользователем?
name Имя объекта.

Публичные Методы

GetInstanceID Возвращает id экземпляра объекта.
ToString Возвращает имя объекта.

Статические Методы

Destroy Удаляет игровой объект, компонент или актив.
DestroyImmediate Уничтожает объект obj. Вместо этого рекомендуется использовать метод Destroy.
DontDestroyOnLoad Не уничтожает целевой объект при загрузке новой сцены. .
FindObjectOfType Возвращает первый активный загруженный объект.
FindObjectsOfType Получает список всех загруженных объектов.
Instantiate Клонирует исходный объект и возвращает клон.

Операторы

bool Объект существует?
operator != Сравнивает, ссылаются ли два объекта на другой объект.
operator == Сравнивает две ссылки на объекты, чтобы определить, ссылаются ли они на один и тот же объект.
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3