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

网格.SetVertexBufferData

建议更改

成功!

感谢你帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们会阅读来自用户的每一项建议更改,并会进行适当的更新。

关闭

提交失败

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

关闭

取消

切换到手册

声明

public void SetVertexBufferData(NativeArray<T> data, int dataStart, int meshBufferStart, int count, int stream, 渲染.MeshUpdateFlags flags);

声明

public void SetVertexBufferData(T[] data, int dataStart, int meshBufferStart, int count, int stream, 渲染.MeshUpdateFlags flags);

声明

public void SetVertexBufferData(List<T> data, int dataStart, int meshBufferStart, int count, int stream, 渲染.MeshUpdateFlags flags);

参数

数据 顶点数据数组。
dataStart 要从其复制的第一个数据元素。
meshBufferStart 接收数据的网格顶点缓冲区中的第一个元素。
计数 要复制的顶点数。
要为其设置数据的顶点缓冲区流(默认 0)。值必须在 0 到 3 的范围内。
标志 控制函数行为的标志,请参阅 MeshUpdateFlags

说明

设置网格顶点缓冲区的数据。

简单地使用 网格 脚本 API 涉及使用 顶点法线 等函数来设置顶点数据。



对于需要最大化性能的高级用例,您可以使用高级 API,其中有 SetSubMeshSetIndexBufferParamsSetIndexBufferDataSetVertexBufferParams 这样的函数。此高级 API 提供了对主要处理原始索引缓冲区、顶点缓冲区和网格子集数据的底层网格数据结构的访问。

您可以使用 SetVertexBufferData 直接设置顶点数据,而无需使用每个顶点属性的格式转换。所提供的 data 布局必须与网格的顶点数据布局匹配(请参阅 SetVertexBufferParamsGetVertexAttributes)。还可以通过 dataStartmeshBufferStartcount 参数对数据进行部分更新。

using UnityEngine;
using UnityEngine.Rendering;
using Unity.Collections;

public class Example : MonoBehaviour { // Vertex with FP32 position, FP16 2D normal and a 4-byte tangent. // In some cases StructLayout attribute needs // to be used, to get the data layout match exactly what it needs to be. [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)] struct ExampleVertex { public Vector3 pos; public ushort normalX, normalY; public Color32 tangent; }

void Start() { var mesh = new Mesh(); // specify vertex count and layout 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);

// set vertex data var verts = new NativeArray<ExampleVertex>(vertexCount, Allocator.Temp);

// ... fill in vertex array data here...

mesh.SetVertexBufferData(verts, 0, 0, vertexCount); } }