Объявление
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.