アニメーションBP(アニメーションブループリント)を触ってみました。
アニメーションBPとは
キャラクターのアニメーションを組む機能です。
UE4に標準で入っています。
とりあえずアニメーションBPを組んでみる
STEP1: 必要なデータを用意する
アニメーションBPを使用してアニメーションを組むためには3Dモデルとモーションデータが必要です。
そういえば最近、Paragonのアセット無料化のニュースを見かけました。
今回はありがたくこちらを使わせてもらうことにします。
マーケットプレイスでParagonアセットを見つける
EpicGamesランチャーのマーケットプレイスで"Paragon"と検索欄に入れます。
Paragonのアセットがいろいろ出てくるので好きなものを選びます。
Minionsというキャラがメカメカしくてなんかカッコイイ。 これにしよ。
ちなみに、Minionsのデータサイズは5GBあります。
DLしたアセットをプロジェクトへ追加する
DLしたデータはLibraryタブから追加できます。
プロジェクト名一覧が表示されるので、データを追加したいプロジェクトを選びます。
以上でデータの用意は完了です。
今回の記事ではParagon: Minionsというアセットを使用していきます。
STEP2 : アニメーションBPの作成
モデルデータとモーションの用意が終わったらアニメーションBPの作成に移ります。
コンテンツブラウザ上で右クリックして、「アニメーション」 -> 「アニメーションBP」を選択します
クラスとスケルトンを選択してOKを押します。
"AnimBP_Buff_Black"という名前を付けることにしました。
STEP3: ステートマシーンを追加する
上記で作成したアニメーションBP "AnimBP_Buff_Black"を開くと以下のような画面が出てきます。
ここで画面を右クリックして"State Machine"と入力して、
"新規のステートマシーンを追加"を選んでStateMachineノードを作成します。
ノードをつなぎます
STEP3: Idleモーションを再生してキャラクターを動かす
次にステートマシーンを編集していきます。
先ほど作成したステートマシーンのノードをダブルクリックして開きます。
そして、アセットブラウザタブの中からIdleモーションをドラッグ&ドロップし、ノードを接続します。
ノードが接続された状態でコンパイルボタンをクリックします。
うまくいけばIdleモーションが再生されます。
アニメーションBPに関する説明はいったん終わりとします。
マップ上にキャラクターを出してアニメーションさせてみる
アニメーションするキャラクターをマップ上に出してみます
STEP1: キャラクターBPの作成
コンテンツブラウザの右クリックメニューからブループリントを選択
キャラクターを選択
ブループリントの名前は"BP_Buff_Black"としておきます。
STEP2: キャラクターBPにアニメーションBPを設定する
Meshコンポーネントを選択し、
Anim Classへ "AnimBP_Buff_Black"を設定、Skeltal Meshへ "Buff_Black"を設定します。
STEP3: マップにキャラクターを配置してゲームを再生
BP_Buff_Blackをマップへドラッグ&ドロップしてゲーム再生するとキャラクターが動きます。
おまけ: 2つのモーションをブレンドしてみる
移動速度が速いときはRunモーションを、移動していないときはIdleモーションを再生。
中間の場合は速さに応じてRun/Idleモーションをブレンドする、というのをやってみました。
モーションを混ぜるにはブレンドスペース1Dを使う
2つのモーションをブレンドする(混ぜる)には ブレンドスペース1D を使用します。
BlendSpace1Dを利用することで、実数を使ってモーションを混ぜることができます。
例えば、「IdleモーションとRunモーションと1:2の割合で混ぜる」といった事ができます。
似た名前のもので "ブレンドスペース" (名前の末尾に1Dが付いていない) がありますが、今回はこれは使用しません。
STEP1: ブレンドスペース1Dの作成
コンテンツブラウザを右クリックして、「アニメーション」 -> 「ブレンドスペース1D」を選択します。
今回は Buff_Blackのスケルトンから使用するブレンドスペース1Dを作りたいので、Buff_Black_Skeleton を選択します
名前ですが、RunとIdleを合成するブレンドスペース1Dを作りたいので、名前を「BlendSpace1D_RunIdle」としました。
ブレンドスペース1Dの編集
次にブレンドスペース1Dを編集していきます。
ブレンドスペース1Dをダブルクリックして開くと以下のような画面が表示されます。
今回は赤い字で示した部分を触ります。
STEP2: モーションの登録
アセットブラウザからIdle(待機モーション)をドラッグ&ドロップし、Blend Space Editor(左隣にあるウィンドウ)の左端に配置します。
アセットブラウザからRun_FWD(前方へ歩くモーション)をドラッグ&ドロップし、Blend Space Editor(左隣にあるウィンドウ)の右端に配置します。
以上を済ませると左側にIdleモーション、右端にはRun_FWDモーションが登録された状態となります。
補足: 下にある数字の意味
ここで、ウィンドウの下を見てみると数字が書かれていることがわかります。
これは
「Axis(軸入力) = 0.0のときにはIdleモーションを再生し、Axis = 100.0の時にはRun_FWDモーションを再生する」
という意味を表しています。
ここで補足ですが、アニメーションBPからブレンドスペース1Dに対してfloat値を引数として渡すことができます。
この入力のことをAxis(軸入力)と呼びます。
STEP3: ステートの作成
まずは最初に作成したアニメーションBP "AnimBP_Buff_Black"を開きます。
次に、右クリックメニューからステートを作成してEntryノードと接続します。
今回はIdleとRunをブレンドしたいので、ノード名を"Idle/Run"としました。
STEP4: ブレンドスペース1Dを使う
Idle/Runノードをダブルクリックして開き、右クリックメニューから"BlendSpace1D_RunIdle"を追加して最終アニメーションポーズへ接続します。
ブレンドスペース1Dの挙動を確認してみる
Axis = 0.0の場合
Idleモーションが再生されます。
Axis = 100.0の場合
Runモーションが再生されます.
Axis = 50.0の場合
IdleモーションとRunモーションが1:1の割合でブレンドされて再生されます。
STEP5: キャラクターの移動スピードをアニメーションに反映する
実際にキャラクターを走らせるため、もうひと手間加えます。
AnimBP_Buff_Blackのイベントグラフタブを選択し、以下のようなノードを組みます。
キャラクターの移動速度ベクトルの長さを計算して、変数Speedに代入しています。
次に、Idle/Runノードを開いてブレンドスペース1Dに変数Speedを接続します。
補足: 挙動について軽く説明
キャラクターが速く移動しているときはSpeedが100に近づくので、BlendSpaceのAxis=100.0に登録されたRunモーションの比重が大きくなります。
移動が遅くなるとSpeedが0に近づくのでBlendSpaceのAxis=0.0に登録されたIdleモーションの比重が大きくなります。
遅く移動しているときはIdleモーションが再生され、速く移動しているときはRunモーションが再生されます。
STEP6: キャラクターを移動させてみる
実際にキャラクターを移動させてアニメーションを確認してみます。
まずは BP_Buff_Blackをダブルクリックして開き、「イベントグラフ」タブを開きます。
Tickノードに"Add Movement Input"ノードを接続します。 WorldDirectionには(1,0,0)を入れておきます
この状態で再生を押すと以下のようなRun_FWDモーションが大きくブレンドされた動きになります。
移動速度を下げるとIdleモーションが大きくブレンドされた動きになります