How to Develop a Game
Mesh
PublishDate: 2025-06-01 | CreateDate: 2025-06-01 | LastModify: 2025-06-01 | Creator:ljf12825

Unity中的Mesh(网格)是一切3D模型、地形、角色、道具、甚至某些UI元素的几何基础,是“物体的骨架”
包含顶点、面、法线、UV、颜色等数据,是3D图形渲染的核心单位

Mesh的构成

数据作用
顶点(Vertices)网格的点,构成形状的基础
三角形(Triangles)每三个顶点组成一个三角面,是渲染最小单元
法线(Normals)每个顶点的方向,用于光照计算
UV 坐标(UVs)纹理坐标,用来决定贴图怎么铺在模型上
顶点色(Colors)每个顶点的颜色,用于特效、调色
切线(Tangents)用于法线贴图的方向辅助向量

这些数据最终会交给GPU,进行渲染

Mesh在Unity中的用途

用途举例
渲染模型静态模型、角色模型、环境场景
自定义几何体Procedural Mesh(如地形、波浪、水面)
碰撞体数据Mesh Collider 也使用 Mesh
特效/轨迹线性 Mesh(如剑气轨迹、能量波)
角色换装动态换装系统中组合不同 Mesh

如何创建、操作Mesh

Unity提供Mesh类,支持自定义几何体

示例:创建一个简单三角形Mesh

Mesh mesh = new Mesh();

Vector3[] vertices = new Vector3[]
{
    new Vector3(0, 0, 0),
    new Vector3(0, 1, 0),
    new Vector3(1, 0, 0)
};

int[] triangles = new int[] {0, 1, 2};

mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.RecalculateNormals(); // 自动生成法线

GetComponent<MeshFilter>().mesh = mesh;

MeshFilter 和 MeshRenderer

在Unity中,MeshFilterMeshRenderer是构成立体物体(3D模型)渲染的核心组件

MeshFilterandMeshRenderer;

MeshFilter:提供模型数据

可以通过以下方式获取或赋值Mesh

MeshFilter mf = GetComponent<MeshFilter>();
Mesh mesh = mf.mesh; // 当前使用的实例化mesh
mf.mesh = someOtherMesh; // 替换为新的Mesh

.mesh是一个实例副本,你修改它不会影响原始资源;.sharedMesh是共享原始资源

MeshRenderer:负责把模型画出来

面板参数

Element 0, 1…
Lighting

Cast Shadows(投射阴影)

Receive Shadows(接收阴影)

Probes(探针相关,环境光/间接光)

在Unity中,Probes是一类帮助处理间接光照和环境反射的技术,目的是让动态物体(如角色、道具)在光照和反射效果上看起来更自然,融入环境

为什么需要探针

Unity中有两类光照

对于静态物体,Unity可以烘焙光照贴图(Lightmap)来记录间接光照
但动态物体(移动的角色、道具)不能使用烘焙光照贴图,这时候就需要探针来帮它“感受环境的光”

探针是一种轻量级采样方式,让动态物体获得类似烘焙光照/环境反射的技术,从而避免使用高开销的实时光照和实时反射

Light Probes

Reflection Probes

Additional Settings(附加设置)

Motion Vectors

Lightmap Static