[Unreal Engine 5]AIキャラクターに待機、歩行アニメーションを設定する

NPCと戦う機能を作る

AIキャラクターと戦う機能を作る part2

こちらのようなAIキャラクターと戦う機能を作っています。本記事では下の動画のように、キャラクターに待機、歩行アニメーションを設定します。

アニメーションブループリントを作成する

キャラクターを動かすためにアニメーションブループリントを使います。

「battle_AI」のフォルダで右クリック→「アニメーション」→「アニメーションブループリント」を選択します。

スケルトンを選択する画面が表示されるので、ダウンロードした「weak_robot」の「weak_robot_skeleton」を選択します。アニメーションブループリントのファイル名は「ABP_battle_ai」としておきます。

「ABP_battle_ai」を開くと以下のような画面になります。
デフォルトで用意されている「Output Pose」に接続されたアニメーションが再生されるようになっています。状況に応じて複数のアニメーションを切り替えて使う場合は「State Machine」を使います。

右クリックで「state machine」ノードを追加します。
名称を「root state machine」として、出力ピンを「Output Pose」に接続します。

待機アニメーションを設定する

「root state machine」をダブルクリックして開くと下図のように「Entry」ノードが用意されています。

「weak_robot_skeleton」には既にいくつかのアニメーションを用意しています。
右下のアセットブラウザを選択して「Idle」をドラッグアンドドロップして追加し、「Entry」と接続します。
ここでコンパイルすると、「Idle」が1回再生されます。

「Idle」をダブルクリックして開くと以下のような画面になります。
左の「Idle」を選択して右の詳細パネルの「Loop Animation」にチェックを入れます。
すると、「Idle」がループ再生されるようになります。

歩行アニメーションを設定する

歩行アニメーションに移る条件を設定するため、いくつか変数を作成します。

左下の「マイブループリント」で変数欄の+ボタンを押して変数を追加します。

Float型変数「speed」
Float型変数「walk_threshold」を追加し、「walk_threshold」のデフォルト値を10にしておきます。

「root state machine」を開き、「Walk」をドラッグアンドドロップして追加します。
「Idle」の枠から「Walk」にドラッグすることで「Idle」から「Walk」へのトランジションを作成することが出来ます。

「Idle」から「Walk」へのトランジションを開くと以下のような画面になります。
ここで用意されている「Result」の「Can Enter Transition」がTrueになると「Idle」から「Walk」へ遷移させることが出来ます。

先ほど作成した「speed」と「walk_threshold」をドラッグアンドドロップして「get speed」と「get walk_threshold」を追加します。
「speed」が増加して「walk_threshold」以上になったときに遷移させたいので、以下のように「greater Equal」を接続します。

右下のアニメーションブラウザを選択すると、設定している変数の値を変更することが出来ます。
試しに「speed」の値を大きくしてみると、「Idle」から「Walk」に遷移することを左上のプレビューで確認できます。

「Walk」から「Idle」に遷移する条件も設定します。
「Walk」の枠から「Idle」にドラッグして「Walk」から「Idle」へのトランジションを作成します。

「Walk」から「Idle」へのトランジションをダブルクリックして開き、今度は「speed」が「walk_threshold」より小さくなることを条件としたいので、「Less」を接続します。

一度「root state machine」に戻り「Walk」をダブルクリックして開きます。
「Walk」の「Loop Animation」にもチェックを付けておきます。

「speed」にキャラクターの水平方向速度を入力する処理を作ります。
「ABP_battle_ai」のイベントグラフに移動します。
イベントグラフにはデフォルトで「Event Blueprint Update Animation」と「Try Get Pawn Owner」が用意されています。

下図のように、「Try Get Pawn Owner」から「get Velocity」、「Vector Length XY」を追加して「set speed」に接続します。
これで「ABP_battle_ai」が割り当てられた親の「Pawn」から情報を取得することが出来るようになります。

「BP_battle_ai」を開きます。

「Mesh」を選択した状態で右の詳細パネルの「Anim Class」に「ABP_battle_ai」を割り当てます。

これで待機と歩行を遷移する「ABP_battle_ai」が設定できました。
ゲームを実行すると、キャラクターが停止中は「Idle」、キャラクターが移動中は「Walk」することが確認できます。

歩行アニメーションを編集する

このままでは「Walk」アニメーションが未完成で、以下の課題があるので修正していきます。

  • 「Walk」をループ再生するときに、アニメーションの最後に余計な動きが入っていてきれいにループしない。
  • 移動速度に対して「Walk」の再生速度が遅くてキャラクターが滑っているように見える。

「weak_robot」フォルダを開いてダウンロードした「weak_robot」の部品のうち「Walk」アニメーションを開きます。すると、以下のような画面が表示されます。

余計な動きは121フレーム以降に入っています。
下のアニメーション再生バーを120フレーム目に合わせて右クリック→「フレーム121からフレーム136を削除」を選択します。
これでアニメーションを再生してみると、120フレーム目の次に1フレーム目に戻ってもきれいにアニメーションがつながることを確認できます。

次に再生速度を修正します。
左のアセット詳細パネルの「Rate Scale」を2.0に変更することで、倍速再生されるようになります。

ここまで実装して、ゲームを実行すると、冒頭の動画のような振る舞いを確認することが出来ます。

コメント

タイトルとURLをコピーしました