Mesh.CombineMeshes
Declaration
public void CombineMeshes(CombineInstance[] combine, bool mergeSubMeshes = true, bool useMatrices = true, bool hasLightmapData = false);Параметры
| Параметр | Описание |
|---|---|
| объединить | Описание мешей для объединения. |
| mergeSubMeshes | Определяет, следует ли объединять меши в одну подсетку. |
| useMatrices | Определяет, следует ли использовать или игнорировать преобразования, предоставленные в массиве CombineInstance. |
| hasLightmapData | Определяет, преобразовывать ли входные данные Mesh lightmap UV с использованием данных смещения масштаба lightmap в структурах CombineInstance. |
Описание
Объединяет несколько мешей в эту меш.
Объединение мешей может повысить производительность за счет уменьшения количества рендеров, необходимых для рендеринга сцены.
Если mergeSubMeshes установлен в true, все экземпляры CombineInstance объединяются в одну подсетку. Если установлено false, каждый экземпляр размещается в своей собственной подсетке в полученной меше. Установите это в true, когда все экземпляры имеют один и тот же материал и топологию для оптимальной производительности.
Когда useMatrices установлен в true, вершины в каждом CombineInstance преобразуются с матрицей экземпляра CombineInstance.transform. В противном случае матрицы преобразования игнорируются и вершины объединяются без изменений. Этот параметр позволяет объединять меши в общее пространство. Чтобы меши правильно выстраивались в объединенной меше, перед объединением временно сбросьте позицию и вращение конечного объекта объединенной меши MeshFilter до нуля, а затем восстановите их.
Установите hasLightmapData в true для преобразования входных данных Mesh lightmap UV с использованием данных смещения масштаба lightmap в CombineInstance структурах. Меши должны иметь одну и ту же текстуру lightmap.
Обратите внимание, что меши должны быть читаемы из CPU для объединения. Если меш не читается CPU, Unity регистрирует предупреждение в консоли и игнорирует экземпляр.
using UnityEngine;
// This script combines the meshes from children into a single new Mesh. // The combined mesh is assigned to the MeshFilter of this GameObject. // The original meshes are not destroyed, but their GameObjects are deactivated.
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))] public class ExampleClass : MonoBehaviour { void Start() { MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>(); CombineInstance[] instances = new CombineInstance[meshFilters.Length];
for (int i = 0; i < meshFilters.Length; i++) { var meshFilter = meshFilters[i]; instances[i] = new CombineInstance { mesh = meshFilter.sharedMesh, transform = meshFilter.transform.localToWorldMatrix, };
meshFilter.gameObject.SetActive(false); }
Mesh combinedMesh = new Mesh(); combinedMesh.CombineMeshes(instances); gameObject.GetComponent<MeshFilter>().sharedMesh = combinedMesh; gameObject.SetActive(true); } }
Дополнительные ресурсы: ,Mesh.isReadable,, ,MeshTopology,.