版本: Unity 6 (6000.0)
语言English
  • C#

Mesh.AcquireReadOnlyMeshData

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。尽管我们无法接受所有提交内容,但我们确实阅读了用户提出的每个建议更改,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册

声明

public static Mesh.MeshDataArray AcquireReadOnlyMeshData(Mesh mesh);

声明

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

声明

public static Mesh.MeshDataArray AcquireReadOnlyMeshData(List<Mesh> meshes);

参数

mesh 输入网格。
meshes 输入网格。

返回值

MeshDataArray 返回一个包含只读 MeshData 结构体的 MeshDataArray。请参阅 MeshDataArrayMeshData

描述

获取网格数据的只读访问快照。

当您将一个或多个网格传递给 Mesh.AcquireReadOnlyMeshData 时,Unity 会返回一个包含只读 MeshData 结构体的 MeshDataArray。您可以从任何线程访问生成的 MeshDataArrayMeshData 结构体。出于内存跟踪和安全原因,创建 MeshDataArray 会产生一些开销,因此,调用一次 Mesh.AcquireReadOnlyMeshData 并请求同一个 MeshDataArray 中的多个 MeshData 结构体,比多次调用 Mesh.AcquireReadOnlyMeshData 更有效率。

每个 MeshData 结构体都包含给定网格数据的只读快照。

在完成对 MeshDataArray 的操作后,必须将其释放。默认情况下,只要在修改网格之前释放 MeshDataArray,调用 Mesh.AcquireReadOnlyMeshData 不会导致任何内存分配或数据复制。但是,如果您调用 Mesh.AcquireReadOnlyMeshData,然后在 MeshDataArray 存在时修改网格,Unity 必须将 MeshDataArray 复制到新的内存分配中。此外,如果您调用 Mesh.AcquireReadOnlyMeshData,然后修改网格,则您的修改不会反映在 MeshData 结构体中。

如果一个或多个输入网格的 isReadablefalse,则此方法将引发 InvalidOperationException。在 Unity 编辑器中工作时,使用 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(); } } }