アニメーション ブループリント の主な活用方法は、アニメーション グラフ および イベント グラフ でロジックを作成することです。このロジックでは、ポーズ動作、変数、およびその他のブループリントのプロパティを定義します。これらのグラフは連携して、任意のフレームでのキャラクターの最終的な出力ポーズを提供します。
このドキュメントでは、アニメーション ブループリントにおけるアニメーション グラフ、イベント グラフ、およびグラフ作成体験の概要について説明します。
前提条件
- アニメーション ブループリント を作成して、開いている。
- アニメーション ブループリントがそのインターフェースと動作を継承している ブループリント ビジュアル スクリプティング について基本的に理解している。
アニメーション グラフ
アニメーション グラフでは、キャラクターのアニメーション固有のロジックを作成します。通常、これにはブレンド、ボーンの変形、ロコモーション、およびその他の同様のアニメーション エフェクトを制御するノードの作成が含まれま す。アニメーション グラフ内では、イベント グラフから計算された値や、関数を使用して、それらの変数を ブレンド スペース などの AnimGraph ノードの入力として接続することができます。ノードおよびその値を組み合わせたエフェクトは、Output Pose に接続され、ここでキャラクターの最終ポーズがフレームごとに定義されます。

基本的な例としては、アニメーション グラフで Sequence Player ノードを作成することができます。アニメーション グラフは アニメーション シーケンス を参照します。このノードを Output Pose ノードに接続して、 ツールバー の [Compile (コンパイル)] をクリックします。これで、アニメーションが無限に再生されるのを確認できます。これは、シーケンス プレイヤー がアニメーションを連続して再生するためです。

ノードを作成して接続する
ブループリント と同じように、グラフ内で右クリックして、ノードを選択すると、ノードが作成されます。

ポーズ 情報を出力するノードを作成した場合、このノードは、Output Pose ノード上など、他のポーズ ピンに接続することができます。通常、ノードを作成して接続するには、ブループリントを再コンパイルする必要があります。

アニメーション グラフで作成できるノード タイプは複数あります。アニメーション グラフで作成可能なノード タイプの詳細については、「アニメーション ノードのリファレンス」を参照してください。
実行フローおよび情報
ポーズ接続 は、ポーズ アイコン で示され、それらを接続している線に沿って点滅するリンクとして実行が表示されます。ブループリントのイベント グラフなどの通常のグラフでは、このフローはプレイ中に視覚化されます。これは、このフローがイベントの発生に依存しているためです。アニメーション グラフは、イベントベースではなく、フレームごとに評価されるため、常に実行のフローが表示されるという点で異なります。

アニメーション グラフでは、実行フローで、特定のノードから他のノードに渡されるポーズを表します。Blends などの一部のノードには複数の入力があり、現時点でどの入力が実行フローの一部であるかを内部で決定します。この決定は、通常、データ ピンに渡される値など、外部入力に依存します。この例では、Blend ノードの Alpha 値を「0」または「1」に設定し、入力される各ポーズの評価を有効または無効にします。

また、ポーズおよびノードには、いくつかの内部属性が含まれることがあり、それらは接続されたピンとノード上のアイコンの間の平行の実行線によって表されます。この情報は、アニメーション ポーズとともに送信される追加の属性を伝えます。

属性のリストは次のとおりです。
属性 | アイコン | 説明 |
---|---|---|
カーブ | ![]() |
アニメーション カーブ データを渡します。 |
属性 | ![]() |
アニメーション データ を渡します。 |
同期 | ![]() |
同期グループ データを渡します。 |
ルート モーション | ![]() |
ルート モーション データを渡します。 |
慣性ブレンド処理 | ![]() |
慣性化 データを渡します。このインジケーターは、Inertialization ノードが必要な場合 (通常はブレンドが行われる場合) にのみ表示されます。 |
ノード関数
アニメーション グラフでの通常のノード実行のほか、ノードの実行ステップ中に呼び出す関数を指定することができます。これにより、関連するノードおよび関数内で編成される、より管理しやすいロジックを作成できます。さらに、ノードがアクティブなときに限りこれらのイベントが呼び出されるため、CPU リソースを節約できます。
これらの関数のプロパティには、アニメーション グラフ で任意の アニメーション ノード を選択し、[Details] パネルで Functions プロパティのカテゴリを見つけることでアクセスできます。

次の関数プロパティが使用可能です。
関数のタイプ | 説明 |
---|---|
On Initial Update | この関数は、ゲームプレイ時またはシミュレーション時に一度のみ実行されます。この関数は、ノードに初めて関連性が生じたときに、On Become Relevant の前に実行されます。ノードに繰り返し関連性が生じた場合は、再実行されません。 |
On Become Relevant | この関数は、ノードに初めて関連性が生じたときに、On Initial Update の後に実行されます。また、ノードのブレンドがオンになって、オフになり、再びオンになるように繰り返し関連性を持つようになった場合にも、再実行されます。 |
On Update | この関数は、ノードに関連性がある限り、ティックごとに連続して実行されます。この関数は、On Become Relevant の実行後に実行されます。 |
アニメーション グラフの 関連性 という概念は、ノードが評価対象であるかどうかを意味します。ブレンド ノードまたはステート マシンを使用しているときなど、ノードが評価されない場合、一部のノードが完全に非アクティブになることがあります。これが発生した場合、そのノードに 関連性はありません。現時点で Output Pose に関与しているノードのみが関連性 があるとみなされます。
この例では、Blend ノードが入力 A に完全にブレンドされているため、Aim Offset ノードは関連性がありません。

新しい 関数 を追加するには、選択した プロパティ の ドロップダウン メニュー をクリックして、[Create Binding (バインディングを作成)] を選択します。これにより、アニメーション ブループリントの新しい関数が作成され、Function プロパティにバインドされます。

この方法で関数を作成すると、関連付けられたノードに関数をリンクさせるために使用される入力ピンが自動的に作成されます。これらのピンは、場合によっては任意選択であるものの、関数を使用してノードの現在の状態を読み取る場合は必須です。
- Context:ノードが、ノードに関連するデータ (デルタ時間、慣性化要求など) を渡すことができます。
- Node:ノードが、このピンを介してノード自身を渡すことができます。通常、このピンは Convert 関数を使用して特定のノード タイプに変換する必要があります。

関数がノードに割り当てられている場合、ノード上に関数名を表示されることで、関数がノードに割り当てられていることが示されます。この例では、キャラクターの回転を取得して、ピッチの値とヨーの値を設定するためのエイム オフセット ロジックは、すべてこの関数内に含まれています。このロジックは、 イベント グラフ 内にある場合のように永続的ではなく、このノードが更新されている間のみ実行されるため、パフォーマンスの負荷が削減されます。

プロパティ アクセス
プロパティの取得と設定を迅速に行うために、さまざまな自動化された関数を含む プロパティ アクセス 機能を使用することができます。プロパティ アクセスは、プロパティを取得するインスタンス、冗長な接続、およびグラフ全体の複雑さを軽減するうえで役立ちます。また、 スレッドセーフ な方法で、アニメーション グラフにゲームプレイ データを自動的に提供する方法も使用できます。
この機能は主に次の 2 つの方法で使用できます。
ノードとして使用する
property access ノード を作成するには、アニメーション グラフ を右クリックして、Variables カテゴリから Property Access を選択します。

追加したら、それを Get 関数にバインドする必要があります。このノードの ドロップダウン メニュー をクリックして、必要な Get 関数 を選択します。また、単一の Get を超えて移動して、より具体的なプロパティを特定することもできます。この例では、TryGetPawnOwner から GetActorLocation、そして 特定の軸 までの Get プロパティ パスが作成されています。

バインドされたら、プロパティ アクセス ノードを使用して、グラフにプロパティ ロジックを提供することができます。

ピンとして使用する
よりシンプルなロジックの場合、プロパティ アクセスをプロパティ ピンに直接埋め込むこともできます。ノード を選択して、[Details] パネルで ピン プロパティを見つけて、そのプロパティの ドロップダウン メニュー をクリックします。ここから、このノードのプロパティにマッピングする同様の Get 関数チェーン を選択することができます。

プロパティ アクセス関数
より複雑なロジックを必要とする値を出力するためのカスタム関数を作成することができます。プロパティ値を正確に出力するために、関数が以下のようになっている必要があります。
- 関数には Return Node が含まれており、最終結果のプロパティは ReturnValue 出力ピンに接続されている。
- 関数の Details パネルで Pure を有効にする。

上記のように作成し適切に設定されると、これらの関数をプロパティ アクセス メニューから追加することができます。

プロパティ アクセスの設定
プロパティ アクセス メニューには、以下の選択項目とプロパティがあります。

名称 | 説明 |
---|---|
Call Site (呼び出しサイト) | [Call Site] は、プロパティ アクセスをどの CPU スレッドで実行するかを制御します。以下のオプションから選択できます。
|
Functions (関数) | プロパティ アクセスにバインドできる関数のリストです。 |
Properties (プロパティ) | アニメーション ブループリントに含まれる変数のリストです。これは、プロパティ アクセスを変数にバインドすることもできるためです。 |
CPU スレッドの使用状況とパフォーマンス
複雑なアニメーション グラフ ロジックを作成する場合、グラフ ロジックのパフォーマンスと負荷を考慮する必要が生じることがあります。デフォルトでは、アニメーション グラフはイベント グラフとは異なる CPU スレッドで実行されます。この CPU スレッドは、「ワーカー スレッド」と呼ばれます。「ゲーム スレッド」は、アニメーション ブループリントのイベント グラフおよびその他すべてのブループリントが代わりに実行される CPU スレッドです。
この動作により、アニメーションの作業を他の更新と並行して実行できるため、マルチコア マシンのゲームのパフォーマンスが大幅に向上します。
また、アニメーション グラフで安全でない操作が実行された場合、コンパイラが警告を発します。安全な操作とは、通常、次の操作です。
- ほとんどのアニメーション グラフ ノードを使用する。
- アニメーション ブループリントのメンバー変数に直接アクセスする (構造体のメンバーを含む)。
- 状態を変更しないブループリントの純粋関数 (ほとんどの数学関数など) を呼び出す。
[Class Settings (クラス設定)] の [Details] パネルで Use Multi Threaded Animation Update を無効にすると、アニメーション グラフがゲーム スレッドで実行されるように、この動作を無効にすることができます。ただし、これは推奨されません。

アニメーション グラフに加えて、関数も、必要に応じて、ワーカー スレッドで実行することができます。関数を ノード関数 と組み合わせて使用すると、アニメーション ブループリント グラフ全体をオフロードして、ワーカー スレッドのみで実行することができ、さらにパフォーマンスが向上します。
選択した関数の [Details] パネルで [Thread Safe] を無効にすることで、関数がゲーム スレッドで実行されるようにこの動作を無効化することができます。ただし、これは推奨されません。

イベント グラフ
各アニメーション ブループリントは 1 つの イベント グラフ を持ちます。イベント グラフはノードのシーケンスを開始するために特殊なアニメーション関連イベントのコレクションを使用する標準のグラフです。イベント グラフの最も一般的な使用方法は、AnimGraph ノードで値またはプロパティを更新することです。
アニメーション イベント
イベント グラフは、エントリ ポイントとして機能するために 1 つ以上のイベントを追加し、希望するアクションを実行するために関数、Flow Control ノード、および変数に接続します。
アニメーション グラフで提供される CPU スレッド および ノード関数 では、イベント グラフをできる限り使用しないようにすることをお勧めします。これは、イベント グラフが、プロジェクト内の他のほとんどのブループリント ロジックと一緒に、プライマリ ゲーム スレッドで実行されるためです。そのため、アニメーション ブループリントに複雑なイベント グラフを使用すると、全体的なパフォーマンスが低下します。これらのイベントのほとんどにスレッドセーフな対応策があるため、できる限り対応策を使用してください。
イベント名 | ノードの画像 | 説明 |
---|---|---|
Begin Play | ![]() |
ブループリント ビジュアル スクリプティング の Event Begin Play と同様に、このイベントはゲームやシミュレーションの開始時 (ただし、アクタの Begin Play イベントの前) に実行されます。 スレッドセーフな代替手段として、代わりに関連するノードの On Initial Update の ノード関数 を使用することができます。 |
Initialize Animation | ![]() |
このイベントは、アニメーション ブループリント インスタンスが作成されたときに一度のみ実行され、初期化処理を実行します。このイベントはアニメーション ブループリントが作成されるとすぐに実行され、アクタの コンストラクション スクリプト および Begin Play の実行前に実行されます。 |
Linked Animation Layers Initialized | ![]() |
このイベントは、アニメーションの初期化後で、リンクされたアニメーション レイヤーが初期化された後に一度だけ実行されます。 スレッドセーフな代替手段として、代わりに関連するアニメーション レイヤー ノードの On Initial Update の ノード関数 を使用することができます。 |
Post Evaluate Animation | ![]() |
フレームごとに実行されます。ただし、アニメーションの評価が終了し、現在のフレームのポーズが適用された後に実行されます。これは、値をリセットしたり、ボーンの正確なトランスフォームを取得するうえで役立ちます。 |
Update Animation | ![]() |
フレームごとに実行され、アニメーション ブループリントが必要な値の計算と更新を行うことができます。このイベントは、イベント グラフの更新ループへのエントリ ポイントです。最後の更新からの経過時間が Delta Time X ピンから得られるため、時間に依存する補間や増分更新を実行することができます。 スレッドセーフな代替手段として、代わりに Blueprint Thread Safe Update Animation 関数 を使用することができます。 |
AnimNotify | ![]() |
スケルトン通知 がトリガーされたときに実行されます。 |
スレッド セーフな更新アニメーション
アニメーション ブループリントのパフォーマンスを向上させるには、Update Animation イベントのスレッドセーフな代替手段として Blueprint Thread Safe Update Animation を使用することができます。この代替手段は、ブループリントに追加するためにオーバーライドする必要のある関数です。Event Graph Update Animation イベントは常にゲーム スレッドで実行されるため、マルチスレッドを活用して全体のフレームレートを向上させることができません。そのため、この代替手段が役立ちます。
これを実行するには、[My Blueprint (マイ ブループリント)] パネルの[Functions] カテゴリで [Override (オーバーライド)] ドロップダウン メニューをクリックし、Blueprint Thread Safe Update Animation を選択します。

これで関数のリストに追加されました。これを開くと、関数のエントリ ポイントと、EventGraph Update Animation ノードの Delta Time X ピンと類似した Delta Time ピンが表示されます。これで、イベント グラフで行う場合と同じように、この関数で Update Animation ロジックを作成することができます。ただし、この関数は、ゲーム スレッドではなくワーカー スレッドで実行されます。
