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

Mesh.SetVertexBufferParams

建议更改

成功!

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

关闭

提交失败

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

关闭

取消

切换到手册

声明

public void SetVertexBufferParams(int vertexCount, params VertexAttributeDescriptor[] attributes);

声明

public void SetVertexBufferParams(int vertexCount, NativeArray<VertexAttributeDescriptor> attributes);

参数

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

其他资源:SetVertexBufferDataVertexAttributeDescriptorGetVertexAttributes