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

Mesh.MeshData.GetIndexData

建议更改

成功!

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

关闭

提交失败

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

关闭

取消

切换到手册

声明

public NativeArray<T> GetIndexData();

返回值

NativeArray<T> 返回一个包含索引缓冲区数据的 NativeArray

描述

MeshData 的索引缓冲区获取原始数据。

GetIndexData 返回一个指向原始索引缓冲区数据的直接“指针”,没有任何内存分配、数据复制或转换。您不需要释放返回的 NativeArray,因为它不代表新的内存分配。

您需要了解确切的网格数据布局才能处理此数据,包括所有顶点属性的存在和格式。数据布局与 Mesh.SetIndexBufferData 中的数据布局相同。通常,具有 16 位索引格式的网格使用 ushort 数据类型,而具有 32 位索引格式的网格使用 int 数据类型。

如果 MeshData 可写,并且您已使用 Mesh.MeshData.SetIndexBufferParams 设置了索引缓冲区的大小和格式,则可以将索引直接写入数组。如果 MeshData 是只读的,则数组也是只读的。

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

using UnityEngine;
using UnityEngine.Rendering;
public class ExampleScript : MonoBehaviour
{
    void Start()
    {
        var mesh = new Mesh();
        mesh.vertices = new[] {Vector3.one, Vector3.zero, Vector3.up};
        mesh.indexFormat = IndexFormat.UInt16;
        mesh.triangles = new[] {2, 0, 1};
        using (var data = Mesh.AcquireReadOnlyMeshData(mesh))
        {
            var indices = data[0].GetIndexData<ushort>();
            // prints 2, 0, 1
            foreach (var i in indices)
                Debug.Log(i);
        }
    }
}