TokageItLab
(Silc Lizard (Tokage) Renew)
4
ここで既に解答していますが、本格的に core に実装するためにはいくつか根本的な実装が必要になります。
現在ユーザーが実行可能な簡易的な解決方法はそこに書いたように、
- ダミーのトラックを作成
- 1フレームごとにダミートラックの値の差を delta として抽出
- ターゲットとなるプロパティにその 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
というように書けます。
ただしこの時、相対アニメーションと相対でないアニメーションはブレンドできない点と、角度と位置を両方動かす場合にはアキュムレーター等の実装が必要な可能性がある点に注意してください。