用于通过脚本创建或修改网格的类。
网格包含顶点和多个三角形数组。
请参阅程序化示例项目
以了解使用网格接口的示例。
三角形数组是顶点数组的简单索引;每个三角形三个索引。
对于每个顶点,可能有一条法线、两个纹理坐标、颜色和切线。
不过这些内容是可选的,可以随意删除。所有顶点信息都存储在具有相同
大小的单独数组中,因此如果网格有 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 | 网格索引缓冲区数据的格式。 |
isReadable | Returns state of the Read/Write Enabled checkbox when model was imported. |
normals | 网格的法线。 |
subMeshCount | The number of sub-Meshes. Every Material has a separate triangle list. |
tangents | 网格的切线。 |
triangles | 包含网格中所有三角形的数组。 |
uv | 网格的基础纹理坐标。 |
uv2 | 网格的第二个纹理坐标集(如果存在)。 |
uv3 | 网格的第三个纹理坐标集(如果存在)。 |
uv4 | 网格的第四个纹理坐标集(如果存在)。 |
vertexBufferCount | Get the number of vertex buffers present in the Mesh. (Read Only) |
vertexCount | 返回网格中的顶点数(只读)。 |
vertices | 返回顶点位置的副本或分配新顶点位置数组。 |
Mesh | 创建空网格。 |
AddBlendShapeFrame | 添加新的混合形状帧。 |
Clear | 清除所有顶点数据和所有三角形索引。 |
ClearBlendShapes | 从网格中清除所有混合形状。 |
CombineMeshes | 将多个网格合并到此网格中。 |
GetBaseVertex | Gets the base vertex index of the given submesh. |
GetBindposes | 获取此实例的绑定姿势。 |
GetBlendShapeFrameCount | 返回混合形状的帧计数。 |
GetBlendShapeFrameVertices | 检索混合形状帧的 deltaNormals、deltaNormals 和 /deltaTangents/。 |
GetBlendShapeFrameWeight | 返回混合形状帧的权重。 |
GetBlendShapeIndex | 按给定名称返回 BlendShape 的索引。 |
GetBlendShapeName | 按给定索引返回 BlendShape 的名称。 |
GetBoneWeights | 获取此实例的骨骼权重。 |
GetColors | 获取此实例的顶点颜色。 |
GetIndexCount | Gets the index count of the given submesh. |
GetIndexStart | Gets the starting index location within the Mesh's index buffer, for the given submesh. |
GetIndices | Gets the index buffer for the specified sub mesh on this instance. |
GetNativeIndexBufferPtr | 检索指向索引缓冲区的原生(底层图形 API)指针。 |
GetNativeVertexBufferPtr | 检索指向顶点缓冲区的原生(底层图形 API)指针。 |
GetNormals | 获取此实例的顶点法线。 |
GetTangents | 获取此实例的切线。 |
GetTopology | Gets the topology of a sub-Mesh. |
GetTriangles | Gets the triangle list for the specified sub mesh on this instance. |
GetUVs | Get the UVs for a given chanel. |
GetVertices | 获取此实例的顶点位置。 |
MarkDynamic | 优化网格以便频繁更新。 |
RecalculateBounds | 从顶点重新计算网格的包围体。 |
RecalculateNormals | 从三角形和顶点重新计算网格的法线。 |
RecalculateTangents | 从法线和纹理坐标重新计算网格的切线。 |
SetColors | 网格的顶点颜色。 |
SetIndices | Sets the index buffer for the sub-Mesh. |
SetNormals | 设置网格的法线。 |
SetTangents | 设置网格的切线。 |
SetTriangles | Sets the triangle list for the sub-Mesh. |
SetUVs | Set the UVs for a given chanel. |
SetVertices | 分配新的顶点位置数组。 |
UploadMeshData | 将以前进行的网格修改上传到图形 API。 |