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