用于 C# 作业系统访问的网格数据快照数组。
对大多数 Unity 对象的访问不是线程安全的,因此为了从 C# 作业系统有效地处理或创建网格,请使用 MeshDataArray
和 MeshData
结构体。
您可以使用 Mesh.AcquireReadOnlyMeshData 以只读方式访问多个网格的网格数据,并使用 Mesh.AllocateWritableMeshData 和 Mesh.ApplyAndDisposeWritableMeshData 创建新网格。
单个 MeshDataArray
结构体表示多个网格的网格数据的快照。使用 Length 和 索引运算符 访问单个网格的数据。内存分配和 C# 作业系统安全跟踪内置于 MeshDataArray
结构体中,因此在同时处理多个网格时,跟踪开销最小。因此,使用单个 MeshDataArray/
结构体来处理多个网格,比操作多个单独的结构体效率更高。
完成对 MeshDataArray
结构体的操作后,务必将其释放。使用 Dispose 在使用完结构体后将其释放,或使用 C# using
模式自动执行此操作。
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(); } } }
其他资源: Mesh.AcquireReadOnlyMeshData、Mesh.AllocateWritableMeshData、Mesh.ApplyAndDisposeWritableMeshData、MeshData。
Dispose | 使用此方法释放 MeshDataArray 结构体。 |