printraw
2026/4/14大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — printraw
printraw
定义
printraw() 和 print() 的作用一样,都是把信息输出到控制台。但它有一个关键区别:不会在末尾自动换行。
普通的 print() 每次输出完都会自动换到下一行,就像每写完一句话就按一次回车。而 printraw() 不会按回车,下一次输出会紧跟在当前输出的后面。
这有什么用呢?最常见的场景是进度条和动态更新——你希望在同一行不断刷新显示的内容,而不是每输出一次就多一行。
函数签名
C#
// C# 中使用 GD.PrintRaw
GD.PrintRaw(params object[] values);GDScript
func printraw(...) -> void参数说明
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
...(可变参数) | Variant(任意类型) | 否 | 可以传入任意数量、任意类型的值,行为与 print() 相同,但不会在末尾添加换行符 |
返回值
无返回值(void)。此函数仅用于在控制台输出信息。
代码示例
基础用法:不换行输出
C#
using Godot;
public partial class PrintrawExample : Node
{
public override void _Ready()
{
// 对比 print 和 printraw
GD.Print("第一行");
GD.Print("第二行");
// 运行结果:
// 第一行
// 第二行
// printraw 不会换行
GD.PrintRaw("你好");
GD.PrintRaw("世界");
GD.Print(""); // 手动换行
// 运行结果: 你好世界
}
}GDScript
extends Node
func _ready():
# 对比 print 和 printraw
print("第一行")
print("第二行")
# 运行结果:
# 第一行
# 第二行
# printraw 不会换行
printraw("你好")
printraw("世界")
print("") # 手动换行
# 运行结果: 你好世界实际场景:显示加载进度
C#
using Godot;
using System.Threading;
public partial class LoadingBar : Node
{
public override void _Ready()
{
// 模拟加载进度条
for (int i = 0; i <= 100; i += 10)
{
// 输出当前进度(不换行)
GD.PrintRaw($"\r加载中: [{new string('=', i / 2)}{new string(' ', 50 - i / 2)}] {i}%");
// 模拟耗时操作
Thread.Sleep(200);
}
GD.Print(""); // 最后换行
// 运行结果(同一行不断刷新):
// 加载中: [==================================================] 100%
}
}GDScript
extends Node
func _ready():
# 模拟加载进度条
for i in range(0, 101, 10):
# 输出当前进度(不换行)
var bar = "=" . repeat(i / 2) + " ".repeat(50 - i / 2)
printraw("\r加载中: [%s] %d%%" % [bar, i])
# 模拟耗时操作
await get_tree().create_timer(0.2).timeout
print("") # 最后换行
# 运行结果(同一行不断刷新):
# 加载中: [==================================================] 100%进阶用法:构建控制台动画效果
C#
using Godot;
public partial class SpinnerAnimation : Node
{
private int _frame;
private readonly string[] _spinner = { "|", "/", "-", "\\" };
public override void _Process(double delta)
{
_frame = (_frame + 1) % _spinner.Length;
// 用 \r 回到行首,覆盖之前的输出
GD.PrintRaw($"\r处理中 {_spinner[_frame]} ");
}
}GDScript
extends Node
var _frame: int = 0
var _spinner: Array = ["|", "/", "-", "\\"]
func _process(_delta: float) -> void:
_frame = (_frame + 1) % _spinner.size()
# 用 \\r 回到行首,覆盖之前的输出
printraw("\r处理中 %s " % _spinner[_frame])注意事项
\r回车符:printraw()常与\r(回车符)搭配使用。\r会让光标回到当前行的开头,这样后续输出就会覆盖之前的内容,实现"原地刷新"的效果。Godot 输出面板的限制:Godot 编辑器的输出面板不是真正的终端,
\r回车覆盖的效果在编辑器中可能无法正常显示。要在终端中看到完整效果,需要从命令行运行游戏。C# 中使用
GD.PrintRaw():C# 中对应的函数是GD.PrintRaw(),行为与 GDScript 的printraw()一致。记得手动换行:如果你用
printraw()输出了一系列内容,最后别忘了用print("")或GD.Print("")换行,否则后续的print()输出会和printraw()的内容挤在同一行。
