Unity 6.3
0 онлайн 72 гостей 3 в системе
Вход

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,.