1. ホーム
  2. animation

[解決済み] (Godot Engine) AnimationPlayerのキー値を現在の値に設定する。

2022-02-07 03:17:59

質問

アニメーションのキー値を、アニメーションで参照されているオブジェクトの現在の値に設定するには、どのようにしたらよいでしょうか。 ヌル initial_val および/または final_val の引数は、Tween Nodeの引数ですか?

初期値をNULLにすると、そのプロパティの現在の値が使用されます。

私の答えは、私が試した現在のアプローチですが、あまりにも複雑すぎるのではないかと危惧しています。

どのように解決するのか?

<ブロッククオート

剣を振るキャラクターを想定し、quot;swing"とquot;parry"の2つのアニメーションがある場合、quot;swing"のアニメーションの進行中にquot;parry"を再生すると、適切に移行することができます。

2つのアニメーションがあり、それらの間をブレンドしたいとします。 というのは、ご質問の内容とは異なりますが( XY問題 ).

を使用して AnimationPlayer のように、任意の2つのアニメーション間の遷移時間を指定することができます。 アニメーションとそれ自身を含む。これは、あるアニメーションを再生するようにGodotに指示したときに、その同じアニメーションが再生されている場合に起こります。

アニメーションパネル(エディタ下部)で、最初のアニメーション(例では "swing")を選択した状態で、"Animation" ボタンをクリックし、"Edit Transitions" を選びます。選択したアニメーションのCross-Animation Blend Timesダイアログが表示されます。

ダイアログには、すべてのアニメーションが数字付きで表示されます(デフォルトでは0)。これは、Godot がアニメーションをブレンドする時間を秒単位で表したものです。

0(デフォルト)は瞬時を意味します。つまり、別のアニメーション(例では "parry")を再生すると、そのアニメーションの開始値にスナップします... これはあなたが望むものではありません。代わりに、時間を長くしてください。

Godot は新しいアニメーションの開始値に補間するのではなく、再生している新しいアニメーションの現在値に補間することに注意してください。


シナリオをもう一度説明すると、最初のアニメーション(例えば "swing")を再生している間に、2番目のアニメーション(例えば "parry")を再生するのです。

2つ目のアニメーションが再生されますが、設定される値はアニメーションの中の値ではありません。その代わり、現在の値とアニメーションの値の間に何らかの補間処理が行われます。補間は、開始時に現在の値が変更されず、Cross-Animation Blend Timesダイアログで設定した時間後に、アニメーションの値が変更されるようにします。

そう、これは線形補間なんです。 少なくとも私が知る限りでは、トランジションが長くなることはほとんどないことを念頭においてください。


アニメーションの初期値を現在の値に置き換えると、2つ目のキーフレームでアニメーションの値を満たすことになります。

代わりに遷移時間を2番目のキーフレームに一致させることができます。 キーフレームが一列に並ばない異なる時刻にあるトラックを持つことができ、各トラックの補間方法を制御できることを考えると、まったく同じではありません。しかし、ここで紹介する方法は、はるかに少ない作業で済みます(コードはまったくありません)。


線形補間が必要ない場合、または2つ以上のアニメーションの間を補間したい場合は、以下のように アニメーションツリー . 参照 アニメーションの状態を制御する .