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

MeshDataArray

UnityEngine 中的结构体

/

实现于: UnityEngine.CoreModule

建议修改

成功!

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

关闭

提交失败

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

关闭

取消

切换到手册

描述

用于 C# 作业系统访问的网格数据快照数组。

对大多数 Unity 对象的访问不是线程安全的,因此为了从 C# 作业系统有效地处理或创建网格,请使用 MeshDataArrayMeshData 结构体。

您可以使用 Mesh.AcquireReadOnlyMeshData 以只读方式访问多个网格的网格数据,并使用 Mesh.AllocateWritableMeshDataMesh.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();
        }
    }
}

属性

LengthMeshDataArray 中的网格数据元素数量。
this[int]通过索引访问 MeshDataArray 元素。

公共方法

Dispose使用此方法释放 MeshDataArray 结构体。