Time.get_ticks_msec
2026/4/14大约 3 分钟
最后更新日期:2026-04-16
最后同步日期:2026-04-15 | Godot 官方原文 — Time.get_ticks_msec
Time.get_ticks_msec
定义
Time.get_ticks_msec 返回引擎启动后经过的毫秒数——就像一个从游戏启动那一刻开始计时的秒表,告诉你"游戏已经运行了多少毫秒"。
打个比方:你点开了手机上的计时器 App,从 0 开始往上跳。GetTicksMsec() 就是去读这个计时器上的数字。游戏刚启动时它是 0,过了 1 秒变成 1000,过了 1 分钟变成 60000。
在游戏开发中,它最常见的用途是测量时间差——比如计算某个操作花了多久、实现冷却计时器、或者定期执行某个逻辑。
函数签名
C#
// Time.GetTicksMsec 获取引擎启动后的毫秒数
public static ulong GetTicksMsec()GDScript
static func get_ticks_msec() -> int参数说明
此方法没有参数。
返回值
ulong (C#) / int (GDScript) —— 引擎启动后经过的毫秒数。类型为无符号 64 位整数(C#)或整数(GDScript)。
代码示例
基础用法:读取当前经过的毫秒数
C#
using Godot;
public partial class MyScene : Node
{
public override void _Ready()
{
ulong ticks = Time.GetTicksMsec();
GD.Print($"引擎已运行: {ticks} 毫秒");
// 运行结果: 引擎已运行: 1523 毫秒(数值取决于实际运行时间)
}
}GDScript
extends Node
func _ready():
var ticks = Time.get_ticks_msec()
print("引擎已运行: ", ticks, " 毫秒")
# 运行结果: 引擎已运行: 1523 毫秒(数值取决于实际运行时间)实际场景:测量函数执行耗时
C#
using Godot;
public partial class MyScene : Node
{
public override void _Ready()
{
// 记录开始时间
ulong startTime = Time.GetTicksMsec();
// 模拟一段耗时操作
for (int i = 0; i < 1000000; i++)
{
_ = Mathf.Sqrt(i);
}
// 记录结束时间并计算差值
ulong endTime = Time.GetTicksMsec();
ulong elapsed = endTime - startTime;
GD.Print($"操作耗时: {elapsed} 毫秒");
// 运行结果: 操作耗时: 42 毫秒(数值取决于实际性能)
}
}GDScript
extends Node
func _ready():
# 记录开始时间
var start_time = Time.get_ticks_msec()
# 模拟一段耗时操作
for i in range(1000000):
_ = sqrt(i)
# 记录结束时间并计算差值
var end_time = Time.get_ticks_msec()
var elapsed = end_time - start_time
print("操作耗时: ", elapsed, " 毫秒")
# 运行结果: 操作耗时: 42 毫秒(数值取决于实际性能)进阶用法:实现技能冷却计时器
C#
using Godot;
public partial class Player : CharacterBody2D
{
[Export] public float ExCooldownMsec = 2000.0f; // 冷却 2 秒
private ulong _lastAttackTime = 0;
public override void _Process(double delta)
{
if (Input.IsActionJustPressed("attack"))
{
ulong now = Time.GetTicksMsec();
ulong elapsed = now - _lastAttackTime;
if (elapsed >= (ulong)ExCooldownMsec)
{
_DoAttack();
_lastAttackTime = now;
}
else
{
ulong remaining = (ulong)ExCooldownMsec - elapsed;
GD.Print($"技能冷却中,还需等待 {remaining} 毫秒");
// 运行结果: 技能冷却中,还需等待 843 毫秒
}
}
}
private void _DoAttack()
{
GD.Print("发动攻击!");
// 运行结果: 发动攻击!
}
}GDScript
extends CharacterBody2D
@export var cooldown_msec: float = 2000.0 # 冷却 2 秒
var _last_attack_time: int = 0
func _process(delta):
if Input.is_action_just_pressed("attack"):
var now = Time.get_ticks_msec()
var elapsed = now - _last_attack_time
if elapsed >= cooldown_msec:
_do_attack()
_last_attack_time = now
else:
var remaining = cooldown_msec - elapsed
print("技能冷却中,还需等待 ", remaining, " 毫秒")
# 运行结果: 技能冷却中,还需等待 843 毫秒
func _do_attack():
print("发动攻击!")
# 运行结果: 发动攻击!注意事项
- 精度为毫秒级:1 毫秒 = 1/1000 秒。对于大多数游戏逻辑来说够用了,但如果需要更高精度,请使用
Time.GetTicksUsec()(微秒级)。 - 从引擎启动开始计时:不是从场景加载或
_Ready()开始,而是从整个 Godot 引擎启动的那一刻开始。 - C# 返回 ulong,GDScript 返回 int:C# 中是无符号长整型,GDScript 中是普通整数。数值会一直增长,大约 49 天后会溢出(但实际游戏中几乎不会遇到)。
- 不会受时间缩放影响:即使你修改了
Engine.TimeScale,这个计时器的走速也不会改变,它始终反映真实的物理时间。
