Version: 2023.1

Mesh.SetVertexBufferParams

切换到手册
public void SetVertexBufferParams (int vertexCount, params VertexAttributeDescriptor[] attributes);
public void SetVertexBufferParams (int vertexCount, NativeArray<VertexAttributeDescriptor> attributes);

参数

vertexCount 网格中的顶点数。
attributes 顶点数据的布局 - 存在的属性、其数据类型等。

描述

设置顶点缓冲区大小和布局。

注意:此方法面向旨在实现最高性能的高级用户,因为它在主要适用于原始索引缓冲区、顶点缓冲区和网格子集数据的基础网格数据结构上运行。Unity 使用此方法可执行非常少的数据验证,因此必须确保数据有效。

特别是必须确保索引缓冲区不包含越界索引,并且 SubMesh 索引范围和边界有效 通过 SetSubMesh 进行更新。

有关从脚本向网格分配数据的较简单方法与较高级方法之间差异的信息,请参阅 Mesh 页面上的说明。

有关如何指定网格属性布局的详细信息,请参阅 VertexAttributeDescriptor

using UnityEngine;
using UnityEngine.Rendering;

public class Example : MonoBehaviour { void Start() { var mesh = new Mesh(); // specify vertex layout with: // - floating point positions, // - half-precision (FP16) normals with two components, // - low precision (UNorm8) tangents var layout = new[] { new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 3), new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float16, 2), new VertexAttributeDescriptor(VertexAttribute.Tangent, VertexAttributeFormat.UNorm8, 4), }; var vertexCount = 10; mesh.SetVertexBufferParams(vertexCount, layout);

// ...later on SetVertexBufferData would be used to set the actual vertex data } }

If the vertex buffer size exceeds the maximum buffer size that the device supports, the method raises an exception. For more information, see SystemInfo.maxGraphicsBufferSize.

另请参阅:SetVertexBufferDataVertexAttributeDescriptorGetVertexAttributes