AnimationPlayerで位置を変更する際、現在の場所から相対的な動きをしたい。

ここで既に解答していますが、本格的に core に実装するためにはいくつか根本的な実装が必要になります。

現在ユーザーが実行可能な簡易的な解決方法はそこに書いたように、

  1. ダミーのトラックを作成
  2. 1フレームごとにダミートラックの値の差を delta として抽出
  3. ターゲットとなるプロパティにその delta を加算

というようなものなります。

例えば 1 秒で x 座標を 50 移動したいのであれば、

@export var move: Vector2

というように move というダミーのプロパティを適当なオブジェクトに追加し、アニメーションで 0 秒地点に Vector2(0, 0)、1 秒地点に Vector2(50, 0) というキーを打ちます。

アニメーションの適用は AnimationPlayer.mixer_applied シグナルで検知できるためシグナルを接続し、

var prev_move: Vector2

func _on_mixer_applied() -> void:
    var delta: Vector2 = dummy_node.move - prev_move 
    target_node.position += delta
    prev_move = dummy_node.move

というように書けます。

ただしこの時、相対アニメーションと相対でないアニメーションはブレンドできない点と、角度と位置を両方動かす場合にはアキュムレーター等の実装が必要な可能性がある点に注意してください。