Объявление
public static Mesh.MeshDataArray AcquireReadOnlyMeshData(Mesh mesh);public static Mesh.MeshDataArray AcquireReadOnlyMeshData(Mesh[] meshes);
public static Mesh.MeshDataArray AcquireReadOnlyMeshData(List
Параметры
| mesh | Входная сетка. |
| meshes | Входные сетки. |
Возвращает
MeshDataArray Возвращает MeshDataArray, содержащий структуры MeshData, доступные только для чтения. См. MeshDataArray и MeshData.
Описание
Получает снимок данных Mesh для доступа только для чтения.
Когда вы передаете один или несколько мешей в Mesh.AcquireReadOnlyMeshData, Unity возвращает MeshDataArray чтения- только структуры MeshData. Вы можете получить доступ к результирующим структурам MeshDataArray и MeshData из любого потока. Создание MeshDataArray сопряжено с некоторыми накладными расходами для отслеживания памяти и из соображений безопасности, поэтому более эффективно сделать один вызов Mesh.AcquireReadOnlyMeshData и запрашивать несколько структур MeshData в одном и том же MeshDataArray, чем делать несколько вызовов Mesh.AcquireReadOnlyMeshData.
Каждая структура MeshData содержит доступный только для чтения моментальный снимок данных для данной сетки.
Вы должны избавиться от MeshDataArray после завершения работы с ним. Вызов Mesh.AcquireReadOnlyMeshData не приводит к выделению памяти или копированию данных по умолчанию, если вы удаляете MeshDataArray. перед изменением сетки. Однако если вы вызываете Mesh.AcquireReadOnlyMeshData, а затем изменяете сетку, пока существует MeshDataArray, Unity должна скопировать MeshDataArray в новое выделение памяти. В дополнение к этому, если вы вызываете Mesh.AcquireReadOnlyMeshData, а затем изменяете Mesh, ваши изменения не отражаются в MeshData структуры.
Используйте Dispose для удаления MeshDataArray или используйте C# используя шаблон, чтобы сделать это автоматически:
using Unity.Collections;
using UnityEngine;
public class ExampleScript : MonoBehaviour
{
void Start()
{
var mesh = new Mesh();
mesh.vertices = new[] {Vector3.one, Vector3.zero};
using (var dataArray = Mesh.AcquireReadOnlyMeshData(mesh))
{
var data = dataArray[0];
// prints "2"
Debug.Log(data.vertexCount);
var gotVertices = new NativeArray<Vector3>(mesh.vertexCount, Allocator.TempJob);
data.GetVertices(gotVertices);
// prints "(1.0, 1.0, 1.0)" and "(0.0, 0.0, 0.0)"
foreach (var v in gotVertices)
Debug.Log(v);
gotVertices.Dispose();
}
}
}
Этот метод выдает InvalidOperationException, если isReadable равно false для одной или нескольких входных сеток. При работе в редакторе Unity используйте MeshUtility.AcquireReadOnlyMeshData, чтобы пропустить эту проверку.
Смотрите так же: MeshDataArray, MeshData, AllocateWritableMeshData, ApplyAndDisposeWritableMeshData.

