Mesh

class in UnityEngine

切换到手册

描述

用于通过脚本创建或修改网格的类。

网格包含顶点和多个三角形数组。 请参阅程序化示例项目 以了解使用网格接口的示例。

三角形数组是顶点数组的简单索引;每个三角形三个索引。

对于每个顶点,可能有一条法线、两个纹理坐标、颜色和切线。 不过这些内容是可选的,可以随意删除。所有顶点信息都存储在具有相同 大小的单独数组中,因此如果网格有 10 个顶点,则还会有大小为 10 的数组 以用于法线和其他属性。

您可能需要将可修改的网格接口用于 3 种用途:

1. Building a mesh from scratch: should always be done in the following order:
a) assign vertices
b) assign triangles.

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { public Vector3[] newVertices; public Vector2[] newUV; public int[] newTriangles; void Start() { Mesh mesh = new Mesh(); GetComponent<MeshFilter>().mesh = mesh; mesh.vertices = newVertices; mesh.uv = newUV; mesh.triangles = newTriangles; } }

2. Modifying vertex attributes every frame:
a) get vertices
b) modify them
c) assign them back to the mesh.

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { void Update() { Mesh mesh = GetComponent<MeshFilter>().mesh; Vector3[] vertices = mesh.vertices; Vector3[] normals = mesh.normals; int i = 0; while (i < vertices.Length) { vertices[i] += normals[i] * Mathf.Sin(Time.time); i++; } mesh.vertices = vertices; } }

3. Continously changing the mesh triangles and vertices:
a) call Clear to start fresh
b) assign vertices and other attributes
c) assign triangle indices.

在分配新顶点或三角形之前调用 Clear 十分重要。 Unity 始终检查提供的三角形索引是否未引用超出边界的顶点。 调用 Clear,分配顶点,然后分配三角形可确保不会有超出边界的数据。

using UnityEngine;

public class ExampleClass : MonoBehaviour { Vector3[] newVertices; Vector2[] newUV; int[] newTriangles;

void Start() { Mesh mesh = GetComponent<MeshFilter>().mesh;

mesh.Clear();

// Do some calculations... mesh.vertices = newVertices; mesh.uv = newUV; mesh.triangles = newTriangles; } }

变量

bindposes绑定姿势。每个索引处的绑定姿势引用索引相同的骨骼。
blendShapeCount返回此网格上的 BlendShape 计数。
boneWeights每个顶点的骨骼权重。
bounds网格的包围体。
colors网格的顶点颜色。
colors32网格的顶点颜色。
indexFormat网格索引缓冲区数据的格式。
isReadableReturns state of the Read/Write Enabled checkbox when model was imported.
normals网格的法线。
subMeshCountThe number of sub-Meshes. Every Material has a separate triangle list.
tangents网格的切线。
triangles包含网格中所有三角形的数组。
uv网格的基础纹理坐标。
uv2网格的第二个纹理坐标集(如果存在)。
uv3网格的第三个纹理坐标集(如果存在)。
uv4网格的第四个纹理坐标集(如果存在)。
vertexBufferCountGet the number of vertex buffers present in the Mesh. (Read Only)
vertexCount返回网格中的顶点数(只读)。
vertices返回顶点位置的副本或分配新顶点位置数组。

构造函数

Mesh创建空网格。

公共函数

AddBlendShapeFrame添加新的混合形状帧。
Clear清除所有顶点数据和所有三角形索引。
ClearBlendShapes从网格中清除所有混合形状。
CombineMeshes将多个网格合并到此网格中。
GetBaseVertexGets the base vertex index of the given submesh.
GetBindposes获取此实例的绑定姿势。
GetBlendShapeFrameCount返回混合形状的帧计数。
GetBlendShapeFrameVertices检索混合形状帧的 deltaNormals、deltaNormals 和 /deltaTangents/。
GetBlendShapeFrameWeight返回混合形状帧的权重。
GetBlendShapeIndex按给定名称返回 BlendShape 的索引。
GetBlendShapeName按给定索引返回 BlendShape 的名称。
GetBoneWeights获取此实例的骨骼权重。
GetColors获取此实例的顶点颜色。
GetIndexCountGets the index count of the given submesh.
GetIndexStartGets the starting index location within the Mesh's index buffer, for the given submesh.
GetIndicesGets the index buffer for the specified sub mesh on this instance.
GetNativeIndexBufferPtr检索指向索引缓冲区的原生(底层图形 API)指针。
GetNativeVertexBufferPtr检索指向顶点缓冲区的原生(底层图形 API)指针。
GetNormals获取此实例的顶点法线。
GetTangents获取此实例的切线。
GetTopologyGets the topology of a sub-Mesh.
GetTrianglesGets the triangle list for the specified sub mesh on this instance.
GetUVsGet the UVs for a given chanel.
GetVertices获取此实例的顶点位置。
MarkDynamic优化网格以便频繁更新。
RecalculateBounds从顶点重新计算网格的包围体。
RecalculateNormals从三角形和顶点重新计算网格的法线。
RecalculateTangents从法线和纹理坐标重新计算网格的切线。
SetColors网格的顶点颜色。
SetIndicesSets the index buffer for the sub-Mesh.
SetNormals设置网格的法线。
SetTangents设置网格的切线。
SetTrianglesSets the triangle list for the sub-Mesh.
SetUVsSet the UVs for a given chanel.
SetVertices分配新的顶点位置数组。
UploadMeshData将以前进行的网格修改上传到图形 API。