You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Godot Animation Player时间轴添加标签并查询时间戳?

在Godot Animation Player中添加时间戳标签并实现前后查询

Godot没有原生的"标签轨道",但可以通过两种实用方式实现你的需求:

方法一:自定义属性轨道存储标签

  • 在Animation Player中添加自定义属性轨道,绑定到AnimationPlayer自身的自定义变量(比如var tags = {},格式为{标签名: 时间戳})
  • 在需要标记的时间戳添加关键帧,将对应标签和时间戳写入这个变量
  • 实现查询函数:
    先提取所有标签的时间戳并排序,再通过对比当前时间找到前/后最接近的标签

示例代码(挂载到AnimationPlayer节点):

var tags = {} # 存储格式:{ "攻击帧": 0.5, "收招帧": 1.2 }

func get_prev_tag(current_time: float) -> String:
    var sorted_times = sorted(tags.values())
    var prev_time = -1.0
    var target_tag = ""
    for time in sorted_times:
        if time < current_time && time > prev_time:
            prev_time = time
            target_tag = _find_tag_by_time(time)
    return target_tag

func get_next_tag(current_time: float) -> String:
    var sorted_times = sorted(tags.values())
    var next_time = INF
    var target_tag = ""
    for time in sorted_times:
        if time > current_time && time < next_time:
            next_time = time
            target_tag = _find_tag_by_time(time)
    return target_tag

func _find_tag_by_time(target_time: float) -> String:
    for tag_name, time in tags:
        if time == target_time:
            return tag_name
    return ""

方法二:利用通知轨道实现标签

  • 添加通知轨道,在目标时间戳添加通知,将通知内容设为标签名
  • 通过解析动画轨道,提取所有通知的时间戳和标签名,再实现查询逻辑

示例代码片段:

func _get_all_notification_tags() -> Dictionary:
    var tags = {}
    var current_anim = $AnimationPlayer.current_animation
    if not current_anim:
        return tags
    
    var anim = $AnimationPlayer.get_animation(current_anim)
    for track_idx in range(anim.track_count):
        var track = anim.get_track(track_idx)
        if track.type == Animation.TYPE_NOTIFICATION:
            for key_idx in range(track.key_count):
                var time = track.get_key_time(key_idx)
                var tag_name = track.get_key_value(key_idx)
                tags[tag_name] = time
    return tags

# 调用_get_all_notification_tags()获取标签后,复用方法一中的get_prev_tag/get_next_tag逻辑即可

两种方法对比

  • 自定义属性轨道:更灵活,可存储额外标签信息,适合复杂场景
  • 通知轨道:原生功能,编辑更直观,适合简单标签标记

内容的提问来源于stack exchange,提问作者Secret

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 14:56:10