Mesh.SetSubMeshes
Declaration
public void SetSubMeshes(SubMeshDescriptor[] desc, int start, int count, Rendering.MeshUpdateFlags flags);public void SetSubMeshes(SubMeshDescriptor[] desc, Rendering.MeshUpdateFlags flags);public void SetSubMeshes(List<SubMeshDescriptor> desc, int start, int count, Rendering.MeshUpdateFlags flags);public void SetSubMeshes(List<SubMeshDescriptor> desc, Rendering.MeshUpdateFlags flags);public void SetSubMeshes(NativeArray<T> desc, int start, int count, Rendering.MeshUpdateFlags flags);public void SetSubMeshes(NativeArray<T> desc, Rendering.MeshUpdateFlags flags);Параметры
| Параметр | Описание |
|---|---|
| снижение | Массив или список дескрипторов данных подсетки. |
| начало | Индекс первого элемента, который будет взят из массива или списка в desc. |
| Количество | Число элементов, которые будут взяты из массива или списка в desc. |
| флаги | (Необязательно) Флаги, управляющие поведением функции, см. MeshUpdateFlags. |
Описание
Устанавливает информацию, определяющую все подсетки в этом Mesh, заменяя любые существующие подсетки.
Обратите внимание: SetSubMeshes, SetSubMesh, SubMeshDescriptor и SetIndexBufferData рассчитаны на максимальную производительность. Эти функции работают с базовыми структурами данных меша: необработанными буферами индексов, буферами вершин и данными подмножеств меша. При использовании этих методов Unity выполняет лишь минимальную проверку, поэтому корректность данных необходимо обеспечить самостоятельно.
В частности, убедитесь, что диапазоны индексов SubMeshDescriptor и значения SubMeshDescriptor.topology заданы правильно. Диапазоны индексов SubMesh, определяемые indexStart и indexCount, не должны пересекаться с диапазонами индексов других SubMesh.
Кроме того, для каждого meshLod объекта SubMesh диапазон lodRange должен находиться внутри нового диапазона индексов. Перед настройкой SubMesh может потребоваться вызвать Mesh.SetLods. Проверку можно отключить, задав для flags значение MeshUpdateFlags.DontValidateLodRanges. При использовании уровней детализации Mesh также убедитесь, что предоставленный диапазон индексов каждого подмеша достаточно велик для всех уровней детализации этого подмеша. Перед настройкой subMesh может потребоваться вызвать Mesh.SetLods. Проверку можно отключить, задав для flags значение MeshUpdateFlags.DontValidateLodRanges.
Сведения о различиях между простыми и расширенными методами назначения данных Mesh из скрипта см. в Mesh.
Значения SubMeshDescriptor-bounds, SubMeshDescriptor-firstVertex и SubMeshDescriptor-vertexCount объекта SubMeshDescriptor автоматически вычисляются методом SetSubMeshes, если не передан флаг MeshUpdateFlags.DontRecalculateBounds. Учтите, что это относится только к границам SubMesh. Для пересчёта границ самого Mesh необходимо вызвать Mesh.RecalculateBounds.
Общая схема использования:
var mesh = new Mesh();
// setup vertex buffer data mesh.vertices = ...;
// set index buffer mesh.SetIndexBufferParams(...); mesh.SetIndexBufferData(...);
// setup information about mesh subsets SubMeshDescriptor[] sm = new SubMeshDescriptor[] {...} mesh.SetSubMeshes(sm);
// update bounds of the mesh mesh.RecalculateBounds();
Подробную информацию о том, какие данные настраивать для каждой подсетки, см. в SubMeshDescriptor.
Дополнительные ресурсы: subMeshCount, GetSubMesh, SetSubMesh, SetIndexBufferParams, SetIndexBufferData, MeshUpdateFlags.