Time.get_ticks_usec
2026/4/14大约 3 分钟
最后更新日期:2026-04-16
最后同步日期:2026-04-15 | Godot 官方原文 — Time.get_ticks_usec
Time.get_ticks_usec
定义
Time.get_ticks_usec 返回引擎启动后经过的微秒数——和 GetTicksMsec() 类似,但精度高了一千倍。
打个比方:如果 GetTicksMsec() 是一块显示到"秒"的手表,那 GetTicksUsec() 就是一块显示到"毫秒"的精密秒表。1 秒 = 1000 毫秒 = 1,000,000 微秒。当你需要比毫秒更精确的时间测量时,就用这个。
在游戏开发中,微秒级精度主要用于性能分析——测量某段代码究竟花了多少时间,帮助找出性能瓶颈。
函数签名
C#
// Time.GetTicksUsec 获取引擎启动后的微秒数
public static ulong GetTicksUsec()GDScript
static func get_ticks_usec() -> int参数说明
此方法没有参数。
返回值
ulong (C#) / int (GDScript) —— 引擎启动后经过的微秒数。
代码示例
基础用法:对比毫秒和微秒的精度
C#
using Godot;
public partial class MyScene : Node
{
public override void _Ready()
{
ulong msec = Time.GetTicksMsec();
ulong usec = Time.GetTicksUsec();
GD.Print($"毫秒: {msec}");
// 运行结果: 毫秒: 1523
GD.Print($"微秒: {usec}");
// 运行结果: 微秒: 1523784
// 注意: 微秒数 = 毫秒数 x 1000 + 额外的小数部分
}
}GDScript
extends Node
func _ready():
var msec = Time.get_ticks_msec()
var usec = Time.get_ticks_usec()
print("毫秒: ", msec)
# 运行结果: 毫秒: 1523
print("微秒: ", usec)
# 运行结果: 微秒: 1523784
# 注意: 微秒数 = 毫秒数 x 1000 + 额外的小数部分实际场景:精确测量函数执行时间
C#
using Godot;
public partial class PerformanceTest : Node
{
public override void _Ready()
{
// 测量一个排序操作花了多少微秒
ulong start = Time.GetTicksUsec();
int[] numbers = new int[10000];
for (int i = 0; i < numbers.Length; i++)
numbers[i] = numbers.Length - i;
System.Array.Sort(numbers);
ulong end = Time.GetTicksUsec();
ulong elapsed = end - start;
GD.Print($"排序耗时: {elapsed} 微秒 ({elapsed / 1000.0} 毫秒)");
// 运行结果: 排序耗时: 850 微秒 (0.85 毫秒)
}
}GDScript
extends Node
func _ready():
# 测量一个排序操作花了多少微秒
var start = Time.get_ticks_usec()
var numbers = []
for i in range(10000):
numbers.append(10000 - i)
numbers.sort()
var end = Time.get_ticks_usec()
var elapsed = end - start
print("排序耗时: ", elapsed, " 微秒 (", elapsed / 1000.0, " 毫秒)")
# 运行结果: 排序耗时: 3200 微秒 (3.2 毫秒)进阶用法:帧间时间分析
C#
using Godot;
public partial class FrameProfiler : Node
{
private ulong _lastFrameTime = 0;
public override void _Ready()
{
_lastFrameTime = Time.GetTicksUsec();
}
public override void _Process(double delta)
{
ulong now = Time.GetTicksUsec();
ulong frameTime = now - _lastFrameTime;
_lastFrameTime = now;
// 如果某一帧超过 20 毫秒(50 FPS 以下),打印警告
if (frameTime > 20000)
{
GD.Print($"帧耗时过长: {frameTime / 1000.0} 毫秒");
// 运行结果: 帧耗时过长: 25.3 毫秒
}
}
}GDScript
extends Node
var _last_frame_time: int = 0
func _ready():
_last_frame_time = Time.get_ticks_usec()
func _process(delta):
var now = Time.get_ticks_usec()
var frame_time = now - _last_frame_time
_last_frame_time = now
# 如果某一帧超过 20 毫秒(50 FPS 以下),打印警告
if frame_time > 20000:
print("帧耗时过长: ", frame_time / 1000.0, " 毫秒")
# 运行结果: 帧耗时过长: 25.3 毫秒注意事项
- 精度为微秒级:1 微秒 = 1/1,000,000 秒,比毫秒精确 1000 倍。适合性能分析等需要高精度计时的场景。
- 和
GetTicksMsec的关系:GetTicksUsec()大约等于GetTicksMsec() * 1000,但GetTicksUsec()提供了额外的精度。 - 数值增长很快:每秒增加 1,000,000。大约运行 584942 年才会溢出(实际上不用担心)。
- 不受
Engine.TimeScale影响:和GetTicksMsec一样,反映的是真实的物理时间,不受游戏时间缩放的影响。
