@export_multiline
2026/4/14大约 4 分钟
最后更新日期:2026-04-16
最后同步日期:2026-04-15 | Godot 官方原文 — @export_multiline
@export_multiline
定义
@export_multiline 是 GDScript 中的一个注解(annotation),用来在 Godot 编辑器的检查器面板中暴露一个多行文本编辑框。普通的 @export 导出 String 类型时,编辑器显示的是单行输入框,只能输入一行文字。而 @export_multiline 会显示一个可以换行的文本区域,适合输入长文本、对话内容、描述文字等。
简单说,普通的 @export 让你填"标题",@export_multiline 让你写"正文"。比如角色有一段对话台词,可能有好几句,用多行文本框就能轻松编辑。
在 C# 中,对应的写法是 [Export(PropertyHint.MultilineText)]。
语法
C#
// 导出多行文本
[Export(PropertyHint.MultilineText)]
public string ExDescription = "";GDScript
# 导出多行文本
@export_multiline var ex_description: String = ""参数说明
@export_multiline 不需要任何参数——它直接写在 String 类型的变量声明前面即可。
| 说明项 | 详情 |
|---|---|
| 变量类型 | 必须是 String |
| 编辑器控件 | 多行文本编辑区域(textarea),支持换行 |
| 适用场景 | 对话文本、描述信息、JSON 配置、长文本内容 |
返回值
@export_multiline 是一个注解,没有返回值。变量的值是一个字符串,可以包含换行符(\n)。
代码示例
C#
using Godot;
public partial class DialogBox : Control
{
// ===== 基础用法:多行文本导出 =====
[Export(PropertyHint.MultilineText)]
public string ExDialogText = "你好,冒险者!\n欢迎来到新手村。";
public override void _Ready()
{
GD.Print($"对话内容:\n{ExDialogText}");
}
// 运行结果: 对话内容:
// 运行结果: 你好,冒险者!
// 运行结果: 欢迎来到新手村。
// ===== 实际场景:物品描述系统 =====
[Export(PropertyHint.MultilineText)]
public string ExItemName = "铁剑";
[Export(PropertyHint.MultilineText)]
public string ExItemDescription = "一把普通的铁剑。\n虽然看起来不起眼,\n但对于新手冒险者来说足够了。";
[Export(PropertyHint.MultilineText)]
public string ExItemLore = "传说这把剑曾经属于一位无名英雄...";
public void PrintItemInfo()
{
GD.Print($"=== {ExItemName} ===");
GD.Print(ExItemDescription);
GD.Print($"[传说] {ExItemLore}");
}
// 运行结果: === 铁剑 ===
// 运行结果: 一把普通的铁剑。
// 运行结果: 虽然看起来不起眼,
// 运行结果: 但对于新手冒险者来说足够了。
// 运行结果: [传说] 传说这把剑曾经属于一位无名英雄...
// ===== 进阶用法:存储 JSON 配置 =====
[Export(PropertyHint.MultilineText)]
public string ExLevelConfig = @"{
""level_name"": ""新手村"",
""difficulty"": 1,
""enemies"": [""史莱姆"", ""小蝙蝠""]
}";
public void ParseLevelConfig()
{
var json = Json.ParseString(ExLevelConfig);
if (json != null)
{
var data = json.AsGodotDictionary();
GD.Print($"关卡名称: {data["level_name"]}");
GD.Print($"难度: {data["difficulty"]}");
}
}
// 运行结果: 关卡名称: 新手村
// 运行结果: 难度: 1
}GDScript
extends Control
# ===== 基础用法:多行文本导出 =====
@export_multiline var ex_dialog_text: String = "你好,冒险者!\n欢迎来到新手村。"
func _ready():
print("对话内容:\n%s" % ex_dialog_text)
# 运行结果: 对话内容:
# 运行结果: 你好,冒险者!
# 运行结果: 欢迎来到新手村。
# ===== 实际场景:物品描述系统 =====
@export_multiline var ex_item_name: String = "铁剑"
@export_multiline var ex_item_description: String = "一把普通的铁剑。\n虽然看起来不起眼,\n但对于新手冒险者来说足够了。"
@export_multiline var ex_item_lore: String = "传说这把剑曾经属于一位无名英雄..."
func print_item_info():
print("=== %s ===" % ex_item_name)
print(ex_item_description)
print("[传说] %s" % ex_item_lore)
# 运行结果: === 铁剑 ===
# 运行结果: 一把普通的铁剑。
# 运行结果: 虽然看起来不起眼,
# 运行结果: 但对于新手冒险者来说足够了。
# 运行结果: [传说] 传说这把剑曾经属于一位无名英雄...
# ===== 进阶用法:存储 JSON 配置 =====
@export_multiline var ex_level_config: String = """{
"level_name": "新手村",
"difficulty": 1,
"enemies": ["史莱姆", "小蝙蝠"]
}"""
func parse_level_config():
var json := JSON.parse_string(ex_level_config)
if json:
var data := json as Dictionary
print("关卡名称: %s" % data["level_name"])
print("难度: %d" % data["difficulty"])
# 运行结果: 关卡名称: 新手村
# 运行结果: 难度: 1注意事项
@export_multiline只能用于String类型的变量。- 编辑器中显示的是可调整大小的文本区域,你可以拖动边框改变大小。
@export_multiline不需要任何参数。- 多行文本中的换行在代码中会以
\n形式存储。 - 如果你只需要简短的单行文本输入,使用普通的
@export即可,不需要@export_multiline。 - C# 中使用
[Export(PropertyHint.MultilineText)]的形式。 - 大量文本内容建议使用
@export_file引用外部文件,而不是直接在检查器中编辑超长文本。
