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

如何在Godot的GDScript中动态修改动画关键帧的数值

动态修改动画关键帧坐标的实现方案

方案1:直接修改动画资源的关键帧数值

  • 首先确认你要修改的动画名称,以及AnimationPlayer节点的路径
  • 实例化动画场景时,先从玩家的Spatial节点拿到目标x、z坐标,再遍历动画的位移轨道关键帧,替换x、z数值

Godot 3.x 代码示例

# 脚本挂载在动画所在场景的根节点
onready var anim_player = $AnimationPlayer

# 外部实例化时调用该方法传入从玩家节点获取的x、z值
func init_anim_pos(target_x: float, target_z: float) -> void:
    var anim = anim_player.get_animation("y_translate") # 替换为你的动画名
    # 查找translation属性对应的轨道编号
    var track_idx = anim.find_track("Spatial:translation", ANIMATION_TRACK_TYPE_VALUE)
    if track_idx < 0:
        return
    # 遍历所有关键帧替换x、z值,保留原有y值
    for key_idx in range(anim.track_get_key_count(track_idx)):
        var pos = anim.track_get_key_value(track_idx, key_idx)
        pos.x = target_x
        pos.z = target_z
        anim.track_set_key_value(track_idx, key_idx, pos)
    # 播放修改后的动画
    anim_player.play("y_translate")

Godot 4.x 代码示例

# 脚本挂载在动画所在场景的根节点
@onready var anim_player: AnimationPlayer = $AnimationPlayer

func init_anim_pos(target_x: float, target_z: float) -> void:
    var anim = anim_player.get_animation("y_translate") # 替换为你的动画名
    var track_idx = anim.find_track("position", Animation.TYPE_VALUE)
    if track_idx < 0:
        return
    for key_idx in range(anim.track_get_key_count(track_idx)):
        var pos = anim.track_get_key_value(track_idx, key_idx)
        pos.x = target_x
        pos.z = target_z
        anim.track_set_key_value(track_idx, key_idx, pos)
    anim_player.play("y_translate")

注意:如果你的动画资源是多实例共享的,修改前需要先复制资源避免影响其他实例:var anim = anim_player.get_animation("y_translate").duplicate()


方案2:更推荐的无侵入实现(无需修改关键帧)

该方案不会改动原动画资源,多实例同时播放也不会出现冲突:

  • 调整动画场景的节点结构:新增一个空Spatial/Node3D作为根节点,原本做位移动画的节点作为它的子节点
  • 调整原有动画:仅控制子节点的y轴数值从-5到5,不设置x、z的关键帧
  • 实例化动画场景时,直接给根节点设置translation(3.x)/position(4.x)的x、z为你从玩家节点拿到的数值即可,设置完成后直接播放动画就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:45:03