MeshInstance2D
2026/4/14大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — MeshInstance2D
MeshInstance2D
节点继承关系
继承链:Node → Node2D → CanvasItem → MeshInstance2D
定义
MeshInstance2D 在 2D 空间中显示一个自定义网格(Mesh)。和 Sprite2D 显示一张现成的图片不同,它显示的是由顶点和三角形组成的几何形状。大多数 2D 游戏不需要直接用它,但当你需要自定义形状或者做 GPU 粒子时,它就派上用场了。
一句话理解:Sprite2D 是贴一张现成的照片,MeshInstance2D 是用积木自己拼出一个形状。
使用频率:★★ 偶尔使用——通常在高级渲染或自定义形状场景中才需要。
节点用途
- 在 2D 空间中渲染自定义 Mesh
- 配合着色器(Shader)实现特殊视觉效果
- 作为 GPU 粒子的渲染载体
- 显示程序化生成的几何形状
使用场景
| 场景 | 说明 |
|---|---|
| 自定义形状渲染 | 需要精确控制顶点位置时 |
| GPU 粒子效果 | 配合着色器实现高性能粒子系统(Particle System) |
| 变形效果 | 通过修改 Mesh 顶点实现网格变形 |
| 自定义着色器渲染 | 需要对每个顶点做特殊处理 |
常用节点搭配
| 搭配节点 | 搭配方式 | 用途 |
|---|---|---|
ShaderMaterial | 作为 Material | 自定义着色器效果 |
MultiMeshInstance2D | 替代关系 | 需要批量渲染大量相同 Mesh 时 |
生效必备素材/资源
| 资源类型 | 格式 | 说明 |
|---|---|---|
Mesh | 各种 2D Mesh 类型 | 如 ArrayMesh、QuadMesh、PlaneMesh 等 |
Material(可选) | ShaderMaterial 等 | 自定义材质和着色器 |
节点属性与信号
Mesh 属性
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
Mesh | Mesh | null | — | 要显示的 2D 网格资源 |
Texture | Texture2D | null | — | 覆盖纹理(仅在 Mesh 支持时有效) |
继承自 CanvasItem 的常用属性
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
SelfModulate | Color | Color(1, 1, 1, 1) | CanvasItem | 修改节点颜色 |
Visible | bool | true | CanvasItem | 是否可见 |
Material | Material | null | CanvasItem | 覆盖材质(可设置 ShaderMaterial) |
信号
MeshInstance2D 本身没有自定义信号,继承自 CanvasItem。
常用方法
| 方法 | 返回值 | 说明 |
|---|---|---|
GetMesh() | Mesh | 获取当前 Mesh |
SetMesh(mesh) | void | 设置 Mesh |
代码示例
基础用法:显示一个四边形 Mesh
C
// 创建一个四边形 Mesh
var meshInst = new MeshInstance2D();
meshInst.Mesh = new QuadMesh();
AddChild(meshInst);
// 设置颜色
meshInst.SelfModulate = Colors.Cyan;GDScript
# 创建一个四边形 Mesh
var mesh_inst = MeshInstance2D.new()
mesh_inst.mesh = QuadMesh.new()
add_child(mesh_inst)
# 设置颜色
mesh_inst.self_modulate = Color.CYAN程序化创建自定义 Mesh
C
// 创建一个三角形 ArrayMesh
var mesh = new ArrayMesh();
var arrays = new Godot.Collections.Array();
arrays.Resize((int)Mesh.ArrayType.Max);
// 顶点位置
arrays[(int)Mesh.ArrayType.Vertex] = new Vector2[]
{
new(0, -50),
new(-50, 50),
new(50, 50)
};
mesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, arrays);
var meshInst = new MeshInstance2D();
meshInst.Mesh = mesh;
meshInst.SelfModulate = Colors.Yellow;
AddChild(meshInst);GDScript
# 创建一个三角形 ArrayMesh
var mesh = ArrayMesh.new()
var arrays = []
arrays.resize(Mesh.ARRAY_MAX)
# 顶点位置
arrays[Mesh.ARRAY_VERTEX] = PackedVector2Array([
Vector2(0, -50),
Vector2(-50, 50),
Vector2(50, 50)
])
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
var mesh_inst = MeshInstance2D.new()
mesh_inst.mesh = mesh
mesh_inst.self_modulate = Color.YELLOW
add_child(mesh_inst)