Unreal Engine でキャラクターの アニメーション ブループリント の開発時に、アニメーションの動作の制御に動的な動きと移動 変数 を実装すると、便利な場合があります。
このドキュメントでは、EventGraph アニメーション ブループリント ロジックを設定して、自分のプロジェクトでこれらの変数を計算する方法について説明します。さらに、このドキュメントでは、property access ノードを使用してプロジェクトのパフォーマンスと安定性を向上させて、スレッドセーフ の ブループリント関数 でこのような変数を計算する方法についても説明します。
前提条件
- 移動コンポーネント による制御可能なサード パーソン キャラクター。
必要に応じて、「Third-Person」テンプレート プロジェクト で、この要件を補足することができます。
キャラクター オブジェクトの参照
ほとんどのアニメーション変数は、EventGraph でキャラクターの 移動コンポーネント を使用して計算することができます。キャラクターの移動コンポーネントを使用して他のアニメーション変数を計算するには、参照変数を作成する必要があります。
最初に、キャラクターのアニメーション ブループリントの イベントグラフ で、Event Blueprint Initialization Animation ノードを作成します。

Event Initialization ノードから、キャラクターのブループリントにアニメーション ブループリントをキャストする Cast ノードを作成します。
ワークフローの例では、キャラクターのブループリントは、「Third Person」テンプレート プロジェクトにある BP_ThirdPersonCharacter
です。
次に、Get Owning Actor ノードを作成して、Return Value 出力ピンを Cast ノードの Object 入力ピンに接続します。

次に、キャスト ノードの As Character 出力ピンを 右クリック して、コンテキスト メニューから Promote to Variable オプションを選択し、キャラクター オブジェクトの参照変数を作成します。
ロジックの接続後、ブループリントの EventGraph と AnimGraph で キャラクター オブジェクト の参照変数にアクセス可能になります。

移動コンポーネントの参照
キャラクター オブジェクト からキャラクターの 移動コンポーネント を分離するには、Get Character Movement ノードが必要です。Set Character 変数ノードの Character 出力ピンから、Get Character Movement ノードを作成します。

次に、変数に対して Character Movement 出力ピンを 右クリック して、コンテキスト メニューから Promote to variable を選択し、移動コンポーネントの参照変数を作成します。

ロジックの接続後、ブループリントの EventGraph と AnimGraph で キャラクターの移動コンポーネント の参照変数にアクセス可能になります。

速度
方向やスピードが必要なアニメーションの計算時に、キャラクターの速度は、使用すると便利な値になる場合があります。
EventGraph で速度変数を作成するには、最初に Event Blueprint Update Animation ノードを作成します。
次に、移動コンポーネント の参照変数を EventGraph に追加します。次に、Get Velocity ノードを使用して、移動コンポーネントの方向と移動のマグニチュードを表すベクター値を計算することができます。

次に、Get Velocity の Velocity 出力を 右クリック して、コンテキスト メニューから Promote to Variable オプションを選択し、速度変数を作成します。
ロジックの接続後、ブループリントの EventGraph と AnimGraph で 速度 変数にアクセス可能になります。

ここで、Print String ノードが、キャラクターの速度の更新された X 値、Y 値および Z 値でフレームごとにデバッグ メッセージを送信します。

スレッドセーフ
最初に、キャラクターのアニメーション ブループリントで新しいスレッド セーフ関数を作成します。
次に、グラフを 右クリック して property access ノードを作成します。
property access ノードのドロップダウン メニューから関数 Try Get Pawn Owner > Get Movement Component > Velocity を選択します。次に、ベクターの出力ピンを右クリックして、Promote to Variable を選択し、速度変数を作成します。

ロジックの接続後、ブループリントの EventGraph と AnimGraph で 速度 変数にアクセス可能になります。

この関数をプロジェクトのランタイム時に更新するには、スレッド セーフの Velocity 関数を Blueprint Thread Safe Update Animation グラフに追加します。

キャラクターのアニメーション ブループリントは、キャラクターの速度をスレッド セーフで計算するようになりました。
Character Speed
走っている状態または歩いている状態など、キャラクターのスピードに基づいてアニメーションを選択する際に、キャラクターの移動のスピード変数を使用すると便利な場合があります。
Vector Length XY ノードを速度変数から作成して、キャラクターのスピードを移動コンポーネントの速度と分離できます。
次に、Vector Length XY ノードの Return Value 出力ピンを 右クリック して、コンテキスト メニューから Promote to Variable を選択します。

ロジックの接続後、ブループリントの EventGraph と AnimGraph で スピード 変数にアクセス可能になります。
ここで、Print String ノードが、キャラクターのスピードの更新された値でフレームごとにデバッグ メッセージを送信します。

スレッドセーフ
最初に、キャラクターのアニメーション ブループリントで新しいスレッド セーフ関数を作成します。
次に、property access ノードを作成して、ドロップダウン メニューから関数 Try Get Pawn Owner > Movement Component > Velocity を選択します。
property access ノードの出力から、Vector Length XY ノードを作成して、前方向の動きと横方向の動き (X 軸と Y 軸) を抽出します。

この関数をプロジェクトのランタイム時に更新するには、スレッド セーフの Speed 関数を Blueprint Thread Safe Update Animation グラフに追加します。

キャラクターのアニメーション ブループリントは、キャラクターの速度をスレッド セーフで計算するようになりました。
移動のしきい値
キャラクターの移動がアニメーションの再生をトリガーするタイミングを制御するには、キャラクターのスピードが設定したマグニチュードに達した際に移動を許可する、移動のしきい値変数を作成します。
EventGraph のキャラクターのスピード変数から、Greater Than or Equal To (>=) ノードを作成して値を低い数値に設定します。
0.1
など、非常に小さな値になることがあります。
Greater Than or Equal To (>=) ノードのブール型出力ピンを 右クリック して、コンテキスト メニューから Promote to Variable を選択します。

ロジックの接続後、アニメーション ブループリントの EventGraph と AnimGraph で 移動のしきい値 変数にアクセス可能になります。
ここで、Print String ノードが、キャラクターの移動のしきい値変数の更新された状態でフレームごとにデバッグ メッセージを送信します。

スレッドセーフ
最初に、キャラクターのアニメーション ブループリントで新しいスレッド セーフ関数を作成します。
スレッド セーフ グラフに property access ノードを作成して、ノードを Try Get Pawn Owner > Movement Component > Velocity に設定します。Vector Length XY 関数ノードで前方向の動きと横方向の移動を抽出します。
次に、Greater Than or Equal To (>=) ノードで、スピードのしきい値を設定して移動のアニメーションが発生しないようにします。
0.1
など、非常に小さな値になることがあります。
次に、Greater Than or Equal To (>=) ノードのブール型出力ピンを 右クリック して、コンテキスト メニューから Promote to Variable を選択します。

この関数をプロジェクトのランタイム時に更新するには、スレッド セーフの Should Move 関数を Blueprint Thread Safe Update Animation グラフに追加します。

キャラクターのアニメーション ブループリントは、キャラクターの移動のしきい値変数をスレッド セーフ関数で計算するようになりました。
ジャンプと落下
ジャンプと落下変数を使用して、キャラクターの AnimGraph でジャンプと着地アニメーションを再生するタイミングを決定できます。
最初に、移動コンポーネント 変数をアニメーション ブループリントの EventGraph に作成します。
これで、IsFalling 関数ノードを 移動コンポーネント 参照変数ノードから作成できます。
Is Falling ノードの Return Value 出力ピンを 右クリック して、コンテキスト メニューから Promote to Variable を選択します。

ロジックの接続後、アニメーション ブループリントの EventGraph と AnimGraph で ジャンプと落下 変数にアクセス可能になります。
ここで、Print String ノードが、キャラクターのジャンプと落下変数の更新された状態でフレームごとにデバッグ メッセージを送信します。

スレッドセーフ
最初に、キャラクターのアニメーション ブループリントで新しいスレッド セーフ関数を作成します。
property access ノードを作成して、ノードを Try Get Pawn Owner > Get Movement Component > IsFalling に設定します。
property access ノードの出力ピンを 右クリック して、コンテキスト メニューから Promote to Variable オプションを選択します。

この関数をプロジェクトのランタイム時に更新するには、スレッド セーフの Is Falling 関数を Blueprint Thread Safe Update Animation グラフに追加します。

キャラクターのアニメーション ブループリントは、キャラクターのジャンプと落下状態変数をスレッド セーフ関数で計算するようになりました。
EventGraph リファレンス
ここで、完全な Event Blueprint Update Animation ロジックをワークフロー例で使用される EventGraph で参照することができます。
