AcquireReadOnlyMeshData
Gets a snapshot of Mesh data for read-only access.
Read time 5 minutesLast updated 4 days ago
Definition
- Type: Method
- Namespace: UnityEngine
- Assembly: UnityEngine.CoreModule
AcquireReadOnlyMeshData(Mesh)
Gets a snapshot of Mesh data for read-only access.
public static Mesh.MeshDataArray AcquireReadOnlyMeshData(Mesh mesh)
Parameters
The input mesh.
Returns
Type | Description |
|---|---|
| MeshDataArray | Returns a |
Remarks
When you pass one or more Meshes to Mesh.AcquireReadOnlyMeshData, Unity returns a Mesh.MeshDataArray of read-only structs. You can access the resulting and structs from any thread. Creating a has some overhead for memory tracking and safety reasons, so it is more efficient to make a single call to Mesh.AcquireReadOnlyMeshData and request multiple structs in the same than it is to make multiple calls to Mesh.AcquireReadOnlyMeshData.
MeshDataMeshDataArrayMeshDataMeshDataArrayMeshDataMeshDataArrayEach struct contains a read-only snapshot of data for a given Mesh.
MeshDataYou must dispose of the once you have finished working with it. Calling Mesh.AcquireReadOnlyMeshData does not cause any memory allocations or data copies by default, as long as you dispose of the before modifying the Mesh. However, if you call Mesh.AcquireReadOnlyMeshData and then modify the Mesh while the exists, Unity must copy the into a new memory allocation. In addition to this, if you call Mesh.AcquireReadOnlyMeshData and then modify the Mesh, your modifications are not reflected in the structs.
MeshDataArrayMeshDataArrayMeshDataArrayMeshDataArrayMeshDataThis method will throw an if Mesh.isReadable is for one or more input meshes. When working in the Unity Editor, use MeshUtility.AcquireReadOnlyMeshData to skip this check.
InvalidOperationExceptionfalseusing 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(); } }}
Additional Resources: Mesh.MeshDataArray, Mesh.MeshData, Mesh.AllocateWritableMeshData, Mesh.ApplyAndDisposeWritableMeshData.
AcquireReadOnlyMeshData(Mesh[])
Gets a snapshot of Mesh data for read-only access.
public static Mesh.MeshDataArray AcquireReadOnlyMeshData(Mesh[] meshes)
Parameters
The input meshes.
Returns
Type | Description |
|---|---|
| MeshDataArray | Returns a |
Remarks
When you pass one or more Meshes to Mesh.AcquireReadOnlyMeshData, Unity returns a Mesh.MeshDataArray of read-only structs. You can access the resulting and structs from any thread. Creating a has some overhead for memory tracking and safety reasons, so it is more efficient to make a single call to Mesh.AcquireReadOnlyMeshData and request multiple structs in the same than it is to make multiple calls to Mesh.AcquireReadOnlyMeshData.
MeshDataMeshDataArrayMeshDataMeshDataArrayMeshDataMeshDataArrayEach struct contains a read-only snapshot of data for a given Mesh.
MeshDataYou must dispose of the once you have finished working with it. Calling Mesh.AcquireReadOnlyMeshData does not cause any memory allocations or data copies by default, as long as you dispose of the before modifying the Mesh. However, if you call Mesh.AcquireReadOnlyMeshData and then modify the Mesh while the exists, Unity must copy the into a new memory allocation. In addition to this, if you call Mesh.AcquireReadOnlyMeshData and then modify the Mesh, your modifications are not reflected in the structs.
MeshDataArrayMeshDataArrayMeshDataArrayMeshDataArrayMeshDataThis method will throw an if Mesh.isReadable is for one or more input meshes. When working in the Unity Editor, use MeshUtility.AcquireReadOnlyMeshData to skip this check.
InvalidOperationExceptionfalseusing 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(); } }}
Additional Resources: Mesh.MeshDataArray, Mesh.MeshData, Mesh.AllocateWritableMeshData, Mesh.ApplyAndDisposeWritableMeshData.
AcquireReadOnlyMeshData(List<Mesh>)
Gets a snapshot of Mesh data for read-only access.
public static Mesh.MeshDataArray AcquireReadOnlyMeshData(List<Mesh> meshes)
Parameters
The input meshes.
Returns
Type | Description |
|---|---|
| MeshDataArray | Returns a |
Remarks
When you pass one or more Meshes to Mesh.AcquireReadOnlyMeshData, Unity returns a Mesh.MeshDataArray of read-only structs. You can access the resulting and structs from any thread. Creating a has some overhead for memory tracking and safety reasons, so it is more efficient to make a single call to Mesh.AcquireReadOnlyMeshData and request multiple structs in the same than it is to make multiple calls to Mesh.AcquireReadOnlyMeshData.
MeshDataMeshDataArrayMeshDataMeshDataArrayMeshDataMeshDataArrayEach struct contains a read-only snapshot of data for a given Mesh.
MeshDataYou must dispose of the once you have finished working with it. Calling Mesh.AcquireReadOnlyMeshData does not cause any memory allocations or data copies by default, as long as you dispose of the before modifying the Mesh. However, if you call Mesh.AcquireReadOnlyMeshData and then modify the Mesh while the exists, Unity must copy the into a new memory allocation. In addition to this, if you call Mesh.AcquireReadOnlyMeshData and then modify the Mesh, your modifications are not reflected in the structs.
MeshDataArrayMeshDataArrayMeshDataArrayMeshDataArrayMeshDataThis method will throw an if Mesh.isReadable is for one or more input meshes. When working in the Unity Editor, use MeshUtility.AcquireReadOnlyMeshData to skip this check.
InvalidOperationExceptionfalseusing 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(); } }}
Additional Resources: Mesh.MeshDataArray, Mesh.MeshData, Mesh.AllocateWritableMeshData, Mesh.ApplyAndDisposeWritableMeshData.