TextMesh
2026/4/14大约 4 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — TextMesh
TextMesh
节点继承关系
继承链:Node → Node3D → [VisualInstance3D] → [GeometryInstance3D] → TextMesh
定义
TextMesh 把文字生成为真正的 3D 网格——每个字母都是由三角形组成的立体模型。和 Label3D 用"贴图"方式显示文字不同,TextMesh 的文字是实实在在的 3D 几何体,可以被光照照亮、投射阴影、被物理碰撞。
一句话理解:Label3D 是在一张卡片上写字然后贴在 3D 世界里,TextMesh 是用 3D 打印机把每个字母"打印"成真正的立体模型。
使用频率:★★ 偶尔使用——需要真正的 3D 文字效果时才使用。
节点用途
- 生成真正的 3D 立体文字
- 创建路牌、门牌号、建筑标识
- 霓虹灯效果(配合发光材质)
- 3D 文字动画(翻转、破碎等)
- 游戏标题场景中的 3D 大标题
使用场景
| 场景 | 说明 |
|---|---|
| 路牌标识 | 3D 世界中的街道名称、方向指示 |
| 霓虹灯效果 | 配合自发光材质制作霓虹灯文字 |
| 游戏标题 | 游戏主菜单的 3D 大标题 |
| 建筑标识 | 建筑物上的公司名、楼层号 |
| 刻字效果 | 武器、纪念碑上的刻字 |
常用节点搭配
| 搭配节点 | 搭配方式 | 用途 |
|---|---|---|
Label3D | 替代关系 | 只需要"看起来是文字"时用 Label3D 更轻量 |
StandardMaterial3D | 作为 Material | 给 3D 文字上色、加发光效果 |
StaticBody3D | 作为兄弟子节点 | 让 3D 文字有物理碰撞 |
AnimationPlayer | 作为兄弟子节点 | 让 3D 文字有动画效果 |
生效必备素材/资源
| 资源类型 | 格式 | 说明 |
|---|---|---|
Font(可选) | .ttf、.otf、.woff2 | 自定义字体。不设置则使用默认字体 |
节点属性与信号
文本属性
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
Text | String | "" | — | 要显示的文字内容 |
Font | Font | null(使用主题默认) | — | 自定义字体 |
FontSize | int | 16 | — | 字体大小 |
CurveStep | int | 2 | — | 曲线精度(弯曲文字的平滑度) |
HorizontalAlignment | HorizontalAlignment | Center | — | 水平对齐方式 |
TextDirection | TextDirection | Auto | — | 文字方向 |
Language | String | "" | — | 语言代码 |
立体属性
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
Depth | float | 0.05 | — | 文字的立体深度(挤出厚度)。值越大文字越"厚" |
PixelSize | float | 0.01 | — | 每像素对应的 3D 空间大小 |
CurveStep | int | 2 | — | 曲线精度 |
继承自 GeometryInstance3D 的常用属性
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
CastShadow | ShadowCastingSetting | On | [GeometryInstance3D] | 是否投射阴影 |
ReceiveShadows | bool | true | [GeometryInstance3D] | 是否接收阴影 |
GIMode | GIMode | Static | [GeometryInstance3D] | 全局光照模式 |
MaterialOverride | Material | null | [GeometryInstance3D] | 覆盖材质 |
信号
TextMesh 本身没有自定义信号,继承自 [GeometryInstance3D] 和 Node3D。
常用方法
| 方法 | 返回值 | 说明 |
|---|---|---|
GetText() | String | 获取当前文本 |
SetText(text) | void | 设置文本 |
GetMesh() | Mesh | 获取生成的文字网格 |
代码示例
基础用法:创建 3D 立体文字
C
// 创建 3D 立体文字
var textMesh = new TextMesh();
textMesh.Text = "WELCOME";
textMesh.FontSize = 32;
textMesh.Depth = 0.2f; // 文字厚度
textMesh.PixelSize = 0.05f;
textMesh.Position = new Vector3(0, 5, 0);
// 给文字上色
var mat = new StandardMaterial3D
{
AlbedoColor = new Color(0.2f, 0.6f, 1.0f) // 蓝色
};
textMesh.MaterialOverride = mat;
AddChild(textMesh);GDScript
# 创建 3D 立体文字
var text_mesh = TextMesh.new()
text_mesh.text = "WELCOME"
text_mesh.font_size = 32
text_mesh.depth = 0.2 # 文字厚度
text_mesh.pixel_size = 0.05
text_mesh.position = Vector3(0, 5, 0)
# 给文字上色
var mat = StandardMaterial3D.new()
mat.albedo_color = Color(0.2, 0.6, 1.0) # 蓝色
text_mesh.material_override = mat
add_child(text_mesh)霓虹灯文字效果
C
// 创建发光的霓虹灯文字
var neonText = new TextMesh();
neonText.Text = "OPEN";
neonText.FontSize = 48;
neonText.Depth = 0.05f; // 较薄的文字
neonText.PixelSize = 0.05f;
// 使用自发光材质
var glowMat = new StandardMaterial3D
{
AlbedoColor = new Color(1, 0.2f, 0.5f), // 粉红色
EmissionEnabled = true,
Emission = new Color(1, 0.2f, 0.5f), // 发光颜色
EmissionEnergyMultiplier = 3.0f // 发光强度
};
neonText.MaterialOverride = glowMat;
AddChild(neonText);GDScript
# 创建发光的霓虹灯文字
var neon_text = TextMesh.new()
neon_text.text = "OPEN"
neon_text.font_size = 48
neon_text.depth = 0.05 # 较薄的文字
neon_text.pixel_size = 0.05
# 使用自发光材质
var glow_mat = StandardMaterial3D.new()
glow_mat.albedo_color = Color(1, 0.2, 0.5) # 粉红色
glow_mat.emission_enabled = true
glow_mat.emission = Color(1, 0.2, 0.5) # 发光颜色
glow_mat.emission_energy_multiplier = 3.0 # 发光强度
neon_text.material_override = glow_mat
add_child(neon_text)金色金属文字
C
// 创建金色金属质感文字
var goldText = new TextMesh();
goldText.Text = "GAME OVER";
goldText.FontSize = 64;
goldText.Depth = 0.3f;
goldText.PixelSize = 0.03f;
goldText.Position = new Vector3(0, 3, 0);
// 金属材质
var metalMat = new StandardMaterial3D
{
AlbedoColor = new Color(0.8f, 0.6f, 0.1f), // 金色底色
Metallic = 1.0f, // 完全金属感
Roughness = 0.3f // 较光滑
};
goldText.MaterialOverride = metalMat;
goldText.CastShadow = GeometryInstance3D.ShadowCastingSetting.DoubleSided;
AddChild(goldText);GDScript
# 创建金色金属质感文字
var gold_text = TextMesh.new()
gold_text.text = "GAME OVER"
gold_text.font_size = 64
gold_text.depth = 0.3
gold_text.pixel_size = 0.03
gold_text.position = Vector3(0, 3, 0)
# 金属材质
var metal_mat = StandardMaterial3D.new()
metal_mat.albedo_color = Color(0.8, 0.6, 0.1) # 金色底色
metal_mat.metallic = 1.0 # 完全金属感
metal_mat.roughness = 0.3 # 较光滑
gold_text.material_override = metal_mat
gold_text.cast_shadow = GeometryInstance3D.SHADOW_CASTING_SETTING_DOUBLE_SIDED
add_child(gold_text)