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

Mesh.AllocateWritableMeshData

Объявление

public static Mesh.MeshDataArray AllocateWritableMeshData(int meshCount);

Параметры

meshCount Количество создаваемых сеток.

Возвращает

MeshDataArray Возвращает MeshDataArray, содержащий доступные для записи структуры MeshData. См. MeshDataArray и MeshData.

Описание

Выделяет структуры данных для создания сетки с помощью заданий C#.

Используйте Mesh.AllocateWritableMeshData для получения MeshDataArray записываемых MeshData структуры. Вы можете получить доступ к результирующим структурам MeshDataArray и MeshData из любого потока. Создание MeshDataArray сопряжено с некоторыми накладными расходами для отслеживания памяти и из соображений безопасности, поэтому более эффективно сделать один вызов Mesh.AllocateWritableMeshData и запрашивать несколько структур MeshData в одном и том же MeshDataArray, чем делать несколько вызовов Mesh.AllocateWritableMeshData.

Вы можете заполнить записываемые структуры MeshData данными для создания новых мешей. Используйте Mesh.MeshData.SetVertexBufferParams, чтобы задать размер и структуру буфера вершин, а затем запишите в массив, возвращенный Mesh.MeshData.GetVertexData для установки вершин. Используйте Mesh.MeshData.SetIndexBufferParams, чтобы задать размер и формат индексного буфера, а затем запишите в массив, возвращенный Mesh.MeshData.GetIndexData, чтобы установить индексы. Напишите в Mesh.MeshData.subMeshCount, чтобы установить количество вложенных сеток, а затем используйте Mesh.MeshData. SetSubMesh для установки данных подсетки.

После заполнения доступной для записи структуры MeshData своими данными, используйте Mesh.ApplyAndDisposeWritableMeshData, чтобы применить данные к Mesh объекты и автоматически удалять MeshDataArray.

using UnityEngine; using UnityEngine.Rendering; [RequireComponent(typeof(MeshFilter))] public class ExampleScript : MonoBehaviour { void Start() { // Allocate mesh data for one mesh. var dataArray = Mesh.AllocateWritableMeshData(1); var data = dataArray[0]; // Tetrahedron vertices with positions and normals. // 4 faces with 3 unique vertices in each -- the faces // don't share the vertices since normals have to be // different for each face. data.SetVertexBufferParams(12, new VertexAttributeDescriptor(VertexAttribute.Position), new VertexAttributeDescriptor(VertexAttribute.Normal, stream:1)); // Four tetrahedron vertex positions: var sqrt075 = Mathf.Sqrt(0.75f); var p0 = new Vector3(0,0,0); var p1 = new Vector3(1,0,0); var p2 = new Vector3(0.5f,0,sqrt075); var p3 = new Vector3(0.5f,sqrt075,sqrt075/3); // The first vertex buffer data stream is just positions; // fill them in. var pos = data.GetVertexData<Vector3>(); pos[0] = p0; pos[1] = p1; pos[2] = p2; pos[3] = p0; pos[4] = p2; pos[5] = p3; pos[6] = p2; pos[7] = p1; pos[8] = p3; pos[9] = p0; pos[10] = p3; pos[11] = p1; // Note: normals will be calculated later in RecalculateNormals. // Tetrahedron index buffer: 4 triangles, 3 indices per triangle. // All vertices are unique so the index buffer is just a // 0,1,2,...,11 sequence. data.SetIndexBufferParams(12, IndexFormat.UInt16); var ib = data.GetIndexData(); for (ushort i = 0; i < ib.Length; ++i) ib[i] = i; // One sub-mesh with all the indices. data.subMeshCount = 1; data.SetSubMesh(0, new SubMeshDescriptor(0, ib.Length)); // Create the mesh and apply data to it: var mesh = new Mesh(); mesh.name = "Tetrahedron"; Mesh.ApplyAndDisposeWritableMeshData(dataArray, mesh); mesh.RecalculateNormals(); mesh.RecalculateBounds(); GetComponent<MeshFilter>().mesh = mesh; } }

Смотрите так же: ApplyAndDisposeWritableMeshData, MeshDataArray, MeshData.

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