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に変更することで、倍速再生されるようになります。
ここまで実装して、ゲームを実行すると、冒頭の動画のような振る舞いを確認することが出来ます。
コメント