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

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