キャラクターでより複雑なアニメーション ブループリントを作成するようになると、アニメーション ブループリントの一部を他のアニメーション ブループリントでも再利用したいと考える機会が増えます。再利用するには、特定のアニメーション ブループリントへのリンク、アニメーション レイヤーのリンク、またはテンプレートの使用など、さまざまな方法があります。
このドキュメントでは、さまざまな方法でアニメーション ブループリントのモジュール化の概要について説明します。
前提条件
- アニメーション ブループリント を作成済みであり、それについて理解している。
Linked Anim Graph
アニメーション ブループリント内で、 Linked Anim Graph ノードを使用して、別のアニメーションを参照することができます。
作成および概要
このノードを作成するには、Anim Graph を右クリックして、Linked Anim Blueprints カテゴリから Linked Anim Graph を選択します。また、このリストから特定のアニメーション ブループリント参照を選択してそのノードを追加し、参照することもできます。

このノードの [Details (詳細)] パネルには、次のプロパティが含まれています。これらの設定は Linked Anim Layer ノードにも適用されます。

名称 | 説明 |
---|---|
Instance Class | Linked Anim Graph に使用するアニメーション ブループリントのクラス。 |
Receive Notifies from Linked Instances | スケルトン アニメーション通知 が、他の Linked Anim からこのリンクされたインスタンスによって受信されるかどうか。これは、アニメーション通知の処理を 1 つの Linked Anim インスタンスでカプセル化し、再生は別のインスタンスで行う場合に役立ちます。 |
Propagate Notifies to Linked Instances | スケルトン アニメーション通知を、このリンクされたインスタンスから他のリンクされたインスタンスに送信するかどうか。正常に伝播させるためには、Propagate Notifies to Linked Instances がターゲットの Linked Anim インスタンスでも有効である必要があります。 |
Linked Anim Graph ノードをダブルクリックすると、リンクされたアニメーション ブループリント アセットが割り当てられている場合は、そのアセットが開きます。
Input Pose
Linked Anim Graph を使用する方法の 1 つは、Input Pose ノードを使用してアニメーション入力を公開することです。このノードを作成するには、リンクされたブループリントの Anim Graph を右クリックし、Misc. カテゴリから Input Pose を選択します。その後、このノードをアニメーション ノードに接続できます。

必要に応じて、Input Node を選択し、[Details] パネルでName を変更することで、名前を変更できます。

入力ポーズは必要な数だけ作成でき、そのすべてが入力ピンとして Linked Anim Graph ノードに表示されます。

入力変数
また、ブループリントで 変数を公開する 場合と同様の手順で、 変数 を Linked Anim Graph に公開することができます。変数を選択して、[Instance Editable (インスタンス編集可能)] を有効にします。これにより、リンクされたアニメーション グラフ上で変数が公開されます。

Linked Anim Layer
Linked Anim Layer を使用すると、特定のアニメーション ブループリントにリンクすることができます。Linked Anim Layers では、より標準化された形式のリンクを使用します。Linked Anim Layers では、グラフのプリセット アニメーション レイヤーを定義する、アニメーション レイヤー インターフェース を作成する必要があります。その後、これらの異なるレイヤーのメイン ロジック構造を含む主要なアニメーション ブループリントを作成し、さらに各ゲームプレイの差別化を図るためにさまざまなアニメーション ブループリントを作成することができます。

新しいアニメーションが追加および更新されるライブサービス プロジェクトなど、複雑性の高いアニメーション プロジェクトを作成する場合は、通常、Linked Anim Layer を使用する必要があります。これは、特定のゲームプレイ ロジック用のアニメーション ブループリントの新規作成、または削除を中心としたワークフローに起因します。
単一のアニメーション ブループリントを継続的に更新、管理するのではなく、ロジックをこれらのレイヤーに分離することができます。このことにより、複数のユーザーによる共同作業と実現します。また、関連するアニメーション ブループリントがリンクおよび使用されている場合に限り、システムがそのアニメーション ブループリントをロードするため、メモリを節約できます。
Linked Anim Layer を使用すると、アニメーション ブループリントを複数のアセット ファイルに分割して、アニメーションのメモリを制御することができます。リンクされたレイヤーを含むアニメーション ブループリントは、Unreal Engine のメモリ管理システムを使用して、必要に応じてロード/アンロードを行うことができます。そのため、リンク解除時にアニメーション ブループリントをメモリから削除したい場合は、追加のストリーミング ロジックを設定する必要があります。
アニメーション レイヤー インターフェース
Linked Anim Layer システムを作成するには、Animation Layer Interface アセットを作成して、このアセットでアニメーション ブループリントで使用するアニメーション レイヤーを定義する必要があります。コンテンツ ブラウザ で、追加 (+) ボタンをクリックして、[Animation (アニメーション)] > [Animation Interface (アニメーション インターフェース)] を選択します。

アセットを開くと、アニメーション レイヤー インターフェース エディタが表示されます。このアセットを操作する主な方法は、Animation Layers を追加することです。このためには、[My Blueprint (マイ ブループリント)] パネルの 追加 (+) ボタンをクリックします。

デフォルト以外の同じ Group 名の下にあるレイヤーは、同じアニメーション インスタンスを共有します。 レイヤー インターフェイスのレイヤーには、新しい/デフォルト以外の共有名を使用することをお勧めします。
一部のレイヤーでは、ポーズ入力やプロパティ入力を公開することをお勧めします。これは、このレイヤーが入力されたポーズを修正するためのレイヤーである場合など、Linked Anim 構造で、このような入力を公開する必要があるためです。これを行うには、選択したレイヤーの [Details] パネルの [Inputs (入力)] セクションで、追加 (+) ボタンをクリックします。また、Inputs プロパティにプロパティ入力を追加することができます。

アニメーション レイヤーの設定例として、Full Body、Upper Body、IK の各レイヤーで構成される一般的なシステムを作成することをお勧めします。これらのレイヤーは、キャラクターに次の機能を提供します。
- Full Body (フル ボディ): キャラクターの全体的な基本動作とアニメーション。
- Upper Body (上半身): キャラクターがアイテムや武器を保持している場合は、このロジックを含むレイヤーが設定されている可能性があります。
- IK: キャラクターの腕や脚の最終的な調整。通常、足の配置を調整するための脚の IK や、両手で確実に正しく武器を持つようにするための腕の IK がこれに該当します。
この場合、アニメーション レイヤー インターフェースは次のようになります。

アニメーション レイヤー インターフェース グラフは読み取り専用で、アニメーション ブループリントで共有するアニメーション レイヤーのリストと入力を事前に定義するためにのみ使用されます。
ブループリントのベース設定
Linked Anim Layers を使用する場合、「ベース」アニメーション ブループリントを作成してキャラクターに割り当てます。このベースにはリンクされたアニメーション レイヤーの一般的な構造が含まれますが、必ずしもその中のロジックやデータが含まれるとは限りません。
まず、アニメーション レイヤー インターフェースをアニメーション ブループリントにバインドする必要があります。このためには、[Class Settings (クラス設定)] を選択して、[Interfaces (インターフェース)] セクションの [Add (追加)] ドロップダウン メニューをクリックします。アニメーション レイヤー インターフェース を選択します。

これで、定義済みのレイヤーがブループリントの [Animation Layers (アニメーション レイヤー)] セクションに表示されるようになります。これらのレイヤーを AnimGraph にドラッグして、基本ロジックを作成します。この例では、全体的な構造の順序は、Full Body > Upper Body > IK です。Upper Body と IK の両方のレイヤーにはポーズ入力が追加されており、アニメーションをパススルーさせて、変更することができます。

設定で必要な複雑度や、またどのくらい設定をモジュール化するかに応じて、ベースのアニメーション ブループリント内で特定のロジックを作成しないことを選択することができます。レイヤーは空のままデフォルトにすると、真のロジックはリンクされたさまざまなアニメーション ブループリントから取得されます。

ブループリント固有の設定
次に、キャラクターのアニメーション ブループリントの状態の 1 つに対して、特定のロジックを作成する必要があります。このためには、2 つ目のアニメーション ブループリントを作成して、アニメーション レイヤー インターフェースを作成したアニメーション ブループリントにバインドする必要があります。
ブループリントを作成して開き、インターフェースをバインドすると、リンクされた各レイヤー内でロジックを作成することができます。先ほどの例の続きで、このアニメーション ブループリントは、武器を装備したキャラクターの全体的なアニメーションと動作を処理します。レイヤーには次のロジックが含まれています。
- Upper Body には、キャラクターの武器の 照準動作 (その武器に固有の動作) を制御する Aim Offset ノードが含まれます。
- IK には、その武器に固有のキャラクターの最終的な手の配置を制御する IK Rig ノードが含まれます。
- Full Body には、その武器または一連の動作に固有の、キャラクターの一般的なロコモーションを制御する ステート マシン が含まれます。

このように、武器のアニメーション ブループリント ロジック全体をこのブループリントのみに分割することで、さまざまなユーザーがこれらのブループリントに対して作業を行うことができます。コンテキストに応じて異なるロジックを備える、アニメーション ブループリントを必要なだけ作成することができます。
これらのロジック固有のアニメーション ブループリントでは、ベース ブループリントに存在する同じアニメーション グラフ ロジックを再作成する必要はありません。代わりに、ベース ブループリントは、アニメーション グラフの全体的なロジック構造を維持するという点で、「親」ブループリントと考えることができます。これらの固有のブループリントは、リンクされた各レイヤー内のロジックを作成するためにのみ使用されます。
アニメーション レイヤーをリンクする
Linked Anim Layers を使用するための最後のステップは、Link Anim Class Layers ブループリントの追加です。このノードを使用して、特定のアニメーション ブループリント クラスのレイヤーをアニメーション レイヤー システムにバインドして、現在のロジックをその内部レイヤーのロジックに上書きします。

- Target では、スケルトン メッシュ コンポーネントを接続します。
- In Class では、アニメーション ブループリント クラスを指定します。
前の例の続きで、Link Anim Class Layers ノードを作成して、キャラクター メッシュを接続し、In Class 入力に特定の武器アニメーション ブループリントを設定します。場合によっては、レイヤーの変更後に モンタージュ を再生し、「武器を装備する」アニメーションなどのアニメーションを使用して、変更を遷移させることもできます。

この例の要約は以下のとおりです。
- 武器アクタ ブループリントは、武器アニメーション ブループリント レイヤーへの参照を格納します。つまり、特定の武器に関連するアニメーションは、その武器がゲーム内でアクティブになった場合にのみロードされます。
- そのため、ライフル、弓、ロケット ランチャーなど、他の武器でも同様のロジックとアセットを作成することができます。各武器には、関連付けられているアニメーション ブループリント レイヤーへの参照が格納するため、武器がロードされると、該当する特定のアニメーションのみがロードされます。
追加のユース ケースの例
次は、Linked Anim Layer がフォートナイトでどのように使用されているかを示す例です。

この例では、2 つのインターフェースがあります。1 つは武器用で、もう1つは車両用です。両方のインターフェースを同時に有効にすることができます。また、これらのインターフェースの 1 つを実装する単一のアニメーション ブループリントで、グラフの複数のポイントをオーバーライドすることもできます (武器で WeaponUpperBody
と WeaponAdditive
をオーバーライドするなど)。
以下は、上記の設定で可能な操作例です。
- 車を運転する場合、車両レイヤーがキャラクターの全体のポーズをオーバーライドする。
- 同乗者として乗車している場合、車両でキャラクターの下半身のアニメーション (座席に座る) をオーバーライドし、武器で上半身を制御する。キャラクターが武器を変更した場合は、車で下半身の再生を続けながら、新しい武器の Animation ブループリントで上半身を制御します。
- 武器で上半身のポーズをオーバーライドする。次に、これがメイン グラフの下半身のポーズと組み合わされて、カスタム加算アニメーション (アイドル ノイズなど) が武器からの全身のポーズ上で再生されます。
この方法で、メイン グラフ内の複数のポイントを武器でオーバーライドすることができます。たとえば、ジャンプ、落下、着陸、ジップライン (ワイヤーを滑り降りる) などの状態を含むロコモーション ステート マシンを使用します。このステート マシンを武器ごとに複製するのではなく、このステート マシンをメイン グラフ内に維持して、それぞれの武器の Animation ブループリントにそれぞれの状態でオーバーライド可能なレイヤーを持たせます。
武器が状態をオーバーライドする必要がない場合は、対応するレイヤーでは出力ポーズに対して何も接続する必要はありません。また、レイヤーを含む Animation ブループリントには独自のイベント グラフが含まれるため、特定の車に対するデータを処理する必要がある場合は、データをこの車のアニメーション ブループリントのイベント グラフ内に維持しておくことができます。
アニメーション ブループリント テンプレート
アニメーション ブループリントはテンプレートとして作成することもできます。これは、特定のスケルトン アセットやアニメーションを参照しないブループリントです。つまり、よりモジュール化した方法でアニメーション ブループリント ロジックを再利用することができます。
テンプレート アニメーション ブループリントを作成するには、 通常のアニメーション ブループリント作成プロセス を実行します。ただし、スケルトンを指定するのではなく、[Template (テンプレート)] をクリックして、[Create (作成)] をクリックします。

テンプレートの使用方法
アニメーション ブループリント テンプレートには、通常のアニメーション ブループリントと同じ インターフェースとエディタ があります。ただし、テンプレートはどのスケルトンにも対応していないため、特定のスケルトンに関連するアニメーションやアセットを直接参照することはできません。代わりに、テンプレートのロジックをパラメータ化して、別のブループリントで設定されている変数を公開することができます。
たとえば、AnimGraph で Sequence Player ノードを作成することができます。通常、このノードを使用して、アニメーション シーケンスを直接再生します。ただし、代わりに Sequence プロパティを 変数 として公開することができます。このためには、シーケンス プレイヤーの [Details] パネルにある [Bind (バインド)] ドロップダウン メニューをクリックして、[Expose As Pin (ピンとして公開)] を選択します。

次に、シーケンス プレイヤーで新しく公開された ピン を右クリックし、[Promote to Variable (変数へ昇格)] を選択して、再生するアニメーション シーケンス用の変数を作成します。Linked Anim Graph の変数を公開する場合と同様に、 この変数も公開 する必要があります。

アニメーション ブループリント テンプレートは、アニメーション グラフ内で右クリックして、コンテキスト メニューの [Linked Anim Blueprints] セクションからテンプレートを選択すると、アニメーション グラフ内で参照されます。

その後、ブループリントの要件に合わせて、このテンプレートで公開された変数を設定することができます。
