Unreal Engine 5で、キャラクターをアニメーションさせるためのブループリントの作り方です。
キャラクターの状況に合わせたアニメーションシーケンスを再生する処理をブループリントで実装して、アニメーションさせます。
この記事では、TPSテンプレートを簡略化して、「歩く」と「待機」のアニメーションのみで作ります。
- コンテンツブラウザでフォルダを選択
- フォルダ内で右クリック
- 「アニメーション」の「アニメーションブループリント」を選択
- スケルトンを選択して、「作成」で、アセットを作成
2.イベントグラフの作成
ブループリントをダブルクリックして開き、イベントグラフ内で、アクタ情報を取得する処理と、移動有無を判定する処理を作成します。
イベントグラフ内で右クリックすると、ノードを検索して追加できるので、ノード同士を繋ぎます。
アクタ情報を取得する処理の実装
アニメーション初期化時に、このアニメーションブループリントを持つアクタから、CharacterとCharacter Movement Componentの情報を取得する処理です。
- 「Event Blueprint Initialize Animation」で、アニメーション初期化時に処理を実行
- 「Cast To Character」で、ActorクラスからCharacterクラスに変換して変数に格納
- CharacterクラスからCharacter Movement Componentクラスを取得して変数に格納
移動有無を判定する処理の実装
アニメーション更新時に、Character Movement Componentの情報を取得して、キャラクターが移動有無を判定する処理です。
- 「Event Blueprint Update Animation」で、アニメーション更新時に処理を実行
- 変数に格納しているCharacterを取得して、Characterが有効なら処理を継続
- 変数に格納しているCharacter Movement ComponentのVelocityから、XY平面上での速度を計算して変数に格納
- CharacterのXY平面上の移動速度が閾値より大きい、かつCharacterの加速度が0ではない、という条件の判定結果を変数に格納
覚え書き
ノード検索時の注意点
「状況に合わせた表示」のチェックを外さないと検索できないノードもあります。
変数の追加方法
変数は、「マイブループリント」→変数の右の「+」で追加し、型を選択します。
変数取得の有効性判定
変数取得の有効性を判定するノードは、変数取得ノードを右クリック→「検証済みゲットに変換」で作成します。
キャラクターブループリントのキャスト
アニメーションブループリントでキャラクターブループリントをキャストすると、以下のデメリットがあるので、できるだけ避けた方が良いです。
- パフォーマンスの悪化
キャストは重めの処理なので、頻繁に行うとパフォーマンスが悪くなります。
最初に変数に取得しておくと実行回数を減らせます。 - 再利用性の低下
アニメーションブループリントがキャラクターブループリントに依存するようになるので、異なるキャラクターブループリントに使用できなくなります。
ブループリントインターフェースを使うと、キャラクターブループリントをキャストしなくてもキャラクターブループリントの変数を参照できます。 - プログラムの複雑化
キャラクターブループリントの値を参照するだけであれば良いですが、キャラクターブループリントの値を書き換える処理をアニメーションブループリントが行うと、処理が複雑化して全体の把握が難しくなります。
3.AnimGraphの作成
AnimGraphでは、イベントグラフで計算、取得した情報を使ってアニメーションを再生する条件を設定します。
ここでは、キャラクターの移動有無の判定を使って、「歩く」と「待機」のアニメーションを切り替える処理を作成します。
ステートマシンノードの作成
ステートマシンノードは、その中に複数のステートと、ステートの切り替え条件となるトランジションを設定して利用します。
- AnimGraph内で右クリック
- ノードを検索し、ステートマシンを追加
ステートの作成
ステートは、ステートマシンの中に作成され、アニメーションの再生や合成を行います。
ステートの追加
ステートマシンに「歩く」と「待機」のステートを追加します。
- ステートマシンをダブルクリックして開き、ステートマシン内で右クリック
- 「ステートを追加」で「歩く」用と「待機」用のステートを追加
ステート内処理の実装
ステートが実行されたときに出力するアニメーションを設定します。
- ステートをダブルクリックして開き、ステート内で右クリック
- play ‘アニメーションシーケンス名’を検索して、再生するアニメーションを追加
トランジションの作成
トランジションは、ステート間の移行条件です。
トランジションの追加
ステートを繋ぐと、トランジションが追加されます。
- ステートの外周をドラッグして、「Entry」と「待機」ステート、「待機」ステートと「歩く」ステートを繋ぐ
トランジション内処理の実装
トランジション内の「Result」に繋いだBooleanがTrueの場合に、ステートが移行します。
- トランジションをダブルクリックして開き、イベントグラフで移動判定を格納した変数を取得
- 「待機」から「歩く」へのトランジションで、移動判定の変数をそのまま「Result」に繋ぐ
- 「歩く」から「待機」へのトランジションで、移動判定変数を「Not」を介して「Result」に繋ぐ
上記で作成したアニメーションブループリントを、キャラクターブループリントのスケルタルメッシュに設定すると、キャラクターが移動有無に合わせてアニメーションします。
以上です。
コメント