vertexCount | 网格中的顶点数量。 |
attributes | 顶点数据的布局——哪些属性存在,它们的数据类型等等。 |
设置顶点缓冲区的大小和布局。
注意:此方法专为追求最高性能的高级用户设计,因为它操作的是底层网格数据结构,这些结构主要处理原始索引缓冲区、顶点缓冲区和网格子集数据。使用此方法时,Unity 执行很少的数据验证,因此您必须确保数据有效。
特别是,您必须确保索引缓冲区不包含越界索引,并且通过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 } }
如果顶点缓冲区大小超过设备支持的最大缓冲区大小,则该方法会引发异常。有关更多信息,请参阅SystemInfo.maxGraphicsBufferSize。
其他资源:SetVertexBufferData、VertexAttributeDescriptor、GetVertexAttributes。