Timer
2026/4/14大约 4 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — Timer
Timer
节点继承关系
继承链:Node -> Timer
继承自 Node
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Name | 节点名称 |
| 属性 | ProcessMode | 处理模式(始终 / 暂停时 / 仅编辑器) |
| 属性 | ProcessPriority | 处理优先级,数字越小越先执行 |
| 信号 | ready | 节点进入场景树并准备就绪 |
| 信号 | tree_entered | 节点进入场景树 |
| 信号 | tree_exited | 节点完全离开场景树 |
| 方法 | GetNode<T>() | 按路径获取子节点 |
| 方法 | AddChild() | 添加子节点 |
| 方法 | RemoveChild() | 移除子节点 |
| 方法 | QueueFree() | 帧结束后释放节点 |
| 方法 | GetParent() | 获取父节点 |
定义
定时触发事件的节点。就像厨房定时器一样——拧到3分钟,时间一到就"叮"一声提醒你。在游戏里,你可以用它来做技能冷却、定时刷怪、倒计时等功能。
简单说:它就是一个倒计时器,时间到了就发一个信号(signal)。
使用频率:★★★★★ 通用高频
节点用途
- 技能冷却:玩家放完技能后,等几秒才能再次使用
- 定时生成:每隔几秒在屏幕上方生成一个敌人
- 倒计时显示:关卡倒计时、炸弹倒计时
- 周期性效果:每隔1秒扣一点血(中毒效果)
- 延迟执行:过2秒后再执行某个操作
使用场景
| 场景 | 说明 |
|---|---|
| 技能冷却系统 | 玩家使用技能后,Timer倒计时,冷却完毕才能再次使用 |
| 敌人生成器 | 每隔固定时间在指定位置生成敌人 |
| 状态持续时间 | 中毒、燃烧等状态的持续时间控制 |
| 关卡倒计时 | 限时关卡中显示剩余时间 |
| 延迟触发 | 过一段时间后触发剧情事件 |
常用节点搭配
| 搭配节点 | 搭配方式 |
|---|---|
| 各类游戏节点 | Timer 作为子节点挂载,通过 timeout 信号通知父节点 |
| Label / RichTextLabel | 显示剩余时间 |
| Button | 配合技能按钮,实现冷却UI |
生效必备素材/资源
Timer 不需要任何外部资源,直接创建即可使用。
节点属性与信号
属性
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
| wait_time | float | 1.0 | Timer | 等待时间(秒),即每次倒计时的总时长 |
| one_shot | bool | false | Timer | 是否只触发一次。true = 响一次就不响了;false = 到时间就重新开始 |
| autostart | bool | false | Timer | 是否自动开始计时。true = 游戏一启动就开始倒计时 |
| time_left | float | — | Timer | 剩余时间(只读),随时可以查看还剩多少秒 |
| paused | bool | false | Timer | 是否暂停计时 |
| process_callback | int | 1 | Timer | 计时模式:1=物理帧(受暂停影响),0=空闲帧(不受暂停影响) |
| process_always | bool | false | Timer | 是否在暂停状态下也继续计时 |
| timer_process_mode | int | 0 | Timer | 计时器处理模式(Godot 4.x 新增) |
信号
| 信号 | 参数 | 说明 |
|---|---|---|
| timeout | 无 | 倒计时结束时触发,这是 Timer 最重要的信号 |
常用方法
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| start(time_sec) | time_sec: float = -1 | void | 启动计时器。可以传入新的等待时间覆盖默认值,-1 表示用默认值 |
| stop() | 无 | void | 停止计时器 |
| is_stopped() | 无 | bool | 计时器是否已停止(未在计时) |
代码示例
C
// C# - 技能冷却系统
using Godot;
public partial class SkillSystem : Node
{
private Timer _cooldownTimer;
public override void _Ready()
{
// 创建并配置冷却计时器
_cooldownTimer = new Timer();
_cooldownTimer.WaitTime = 5.0; // 冷却时间5秒
_cooldownTimer.OneShot = true; // 只触发一次
_cooldownTimer.Timeout += OnCooldownFinished;
AddChild(_cooldownTimer);
}
public void UseSkill()
{
// 如果计时器已停止(冷却完毕),才能使用技能
if (_cooldownTimer.IsStopped())
{
GD.Print("释放技能!");
_cooldownTimer.Start(); // 开始冷却倒计时
}
else
{
GD.Print($"技能冷却中,还需 {_cooldownTimer.TimeLeft:F1} 秒");
}
}
private void OnCooldownFinished()
{
GD.Print("技能冷却完毕,可以再次使用!");
}
}GDScript
# GDScript - 技能冷却系统
extends Node
@onready var cooldown_timer: Timer = $CooldownTimer
func _ready():
cooldown_timer.wait_time = 5.0 # 冷却时间5秒
cooldown_timer.one_shot = true # 只触发一次
cooldown_timer.timeout.connect(_on_cooldown_finished)
func use_skill():
# 如果计时器已停止(冷却完毕),才能使用技能
if cooldown_timer.is_stopped():
print("释放技能!")
cooldown_timer.start() # 开始冷却倒计时
else:
print("技能冷却中,还需 %.1f 秒" % cooldown_timer.time_left)
func _on_cooldown_finished():
print("技能冷却完毕,可以再次使用!")