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

Mesh.MeshData.GetVertexData

建议更改

成功!

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

关闭

提交失败

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

关闭

取消

切换到手册

声明

public NativeArray<T> GetVertexData(int stream = 0);

参数

stream 要获取数据的顶点缓冲区流。默认值为 0。

返回值

NativeArray<T> 返回包含顶点缓冲区数据的 NativeArray

描述

获取 MeshData 中给定顶点缓冲区流格式的原始数据。

GetVertexData 返回指向原始顶点缓冲区数据的直接“指针”,没有任何内存分配、数据复制或转换。您无需处置返回的 NativeArray,因为它不代表新的内存分配。

您需要了解确切的网格数据布局才能执行此操作:例如,所有网格顶点属性的存在和格式。数据布局与 Mesh.SetVertexBufferData 中的数据布局匹配。

如果 MeshData 可写,并且您已使用 Mesh.MeshData.SetVertexBufferParams 设置了顶点缓冲区大小和布局,您可以将顶点数据直接写入数组。如果 MeshData 是只读的,则数组是只读的。

其他资源:Mesh.AllocateWritableMeshDataMesh.AcquireReadOnlyMeshDataMesh.MeshData.SetVertexBufferParams

using UnityEngine;
public class ExampleScript : MonoBehaviour
{
    struct Vertex
    {
        public Vector3 pos;
        public Vector2 uv;
    }
    void Start()
    {
        var mesh = new Mesh();
        mesh.vertices = new[] {Vector3.one, Vector3.up};
        mesh.uv = new[] {Vector2.right, Vector2.up};
        using (var data = Mesh.AcquireReadOnlyMeshData(mesh))
        {
            var verts = data[0].GetVertexData<Vertex>();
            // prints "pos (1.0, 1.0, 1.0) uv (1.0, 0.0)" and "pos (0.0, 1.0, 0.0) uv (0.0, 1.0)"
            foreach (var v in verts)
                Debug.Log($"pos {v.pos} uv {v.uv}");
        }
    }
}