Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты
к Руководству

Mesh.AcquireReadOnlyMeshData

Объявление

public static Mesh.MeshDataArray AcquireReadOnlyMeshData(Mesh mesh);

public static Mesh.MeshDataArray AcquireReadOnlyMeshData(Mesh[] meshes);

public static Mesh.MeshDataArray AcquireReadOnlyMeshData(List meshes);

Параметры

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.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3