rn.log

備忘録など

【UE4】アニメーションブループリントをちょっと触ってみた。

アニメーションBP(アニメーションブループリント)を触ってみました。

UE4のバージョン : UE4.19

アニメーションBPとは

キャラクターのアニメーションを組む機能です。
UE4に標準で入っています。

とりあえずアニメーションBPを組んでみる

STEP1: 必要なデータを用意する

アニメーションBPを使用してアニメーションを組むためには3Dモデルとモーションデータが必要です。

そういえば最近、Paragonのアセット無料化のニュースを見かけました。

www.unrealengine.com

今回はありがたくこちらを使わせてもらうことにします。

マーケットプレイスでParagonアセットを見つける

EpicGamesランチャーのマーケットプレイスで"Paragon"と検索欄に入れます。

f:id:r-ngtm:20180409171843p:plain

Paragonのアセットがいろいろ出てくるので好きなものを選びます。

f:id:r-ngtm:20180409172412p:plain

Minionsというキャラがメカメカしくてなんかカッコイイ。 これにしよ。

ちなみに、Minionsのデータサイズは5GBあります。

DLしたアセットをプロジェクトへ追加する

DLしたデータはLibraryタブから追加できます。
f:id:r-ngtm:20180409173435p:plain

プロジェクト名一覧が表示されるので、データを追加したいプロジェクトを選びます。

以上でデータの用意は完了です。


今回の記事ではParagon: Minionsというアセットを使用していきます。
f:id:r-ngtm:20180409195357p:plain:w400

STEP2 : アニメーションBPの作成

モデルデータとモーションの用意が終わったらアニメーションBPの作成に移ります。

コンテンツブラウザ上で右クリックして、「アニメーション」 -> 「アニメーションBP」を選択します
f:id:r-ngtm:20180409174300p:plain


クラスとスケルトンを選択してOKを押します。
f:id:r-ngtm:20180409174500p:plain

"AnimBP_Buff_Black"という名前を付けることにしました。
f:id:r-ngtm:20180409174911p:plain

STEP3: ステートマシーンを追加する

上記で作成したアニメーションBP "AnimBP_Buff_Black"を開くと以下のような画面が出てきます。 f:id:r-ngtm:20180409175523p:plain

ここで画面を右クリックして"State Machine"と入力して、
"新規のステートマシーンを追加"を選んでStateMachineノードを作成します。
f:id:r-ngtm:20180409175704p:plain

ノードをつなぎます
f:id:r-ngtm:20180409182226g:plain


f:id:r-ngtm:20180409175402p:plain

STEP3: Idleモーションを再生してキャラクターを動かす

次にステートマシーンを編集していきます。

先ほど作成したステートマシーンのノードをダブルクリックして開きます。

f:id:r-ngtm:20180409182510p:plain


そして、アセットブラウザタブの中からIdleモーションをドラッグ&ドロップし、ノードを接続します。

f:id:r-ngtm:20180409183255g:plain

ノードが接続された状態でコンパイルボタンをクリックします。
うまくいけばIdleモーションが再生されます。

f:id:r-ngtm:20180409183708p:plain

f:id:r-ngtm:20180409183835g:plain:w240

アニメーションBPに関する説明はいったん終わりとします。

マップ上にキャラクターを出してアニメーションさせてみる

アニメーションするキャラクターをマップ上に出してみます

STEP1: キャラクターBPの作成

コンテンツブラウザの右クリックメニューからブループリントを選択
f:id:r-ngtm:20180409202212p:plain

キャラクターを選択
f:id:r-ngtm:20180409202337p:plain

ブループリントの名前は"BP_Buff_Black"としておきます。
f:id:r-ngtm:20180409202443p:plain

STEP2: キャラクターBPにアニメーションBPを設定する

Meshコンポーネントを選択し、
Anim Classへ "AnimBP_Buff_Black"を設定、Skeltal Meshへ "Buff_Black"を設定します。
f:id:r-ngtm:20180409202758p:plain

STEP3: マップにキャラクターを配置してゲームを再生

BP_Buff_Blackをマップへドラッグ&ドロップしてゲーム再生するとキャラクターが動きます。
f:id:r-ngtm:20180409203233g:plain

おまけ: 2つのモーションをブレンドしてみる

移動速度が速いときはRunモーションを、移動していないときはIdleモーションを再生。
中間の場合は速さに応じてRun/Idleモーションをブレンドする、というのをやってみました。

モーションを混ぜるにはブレンドスペース1Dを使う

2つのモーションをブレンドする(混ぜる)には ブレンドスペース1D を使用します。
BlendSpace1Dを利用することで、実数を使ってモーションを混ぜることができます。

例えば、「IdleモーションとRunモーションと1:2の割合で混ぜる」といった事ができます。


似た名前のもので "ブレンドスペース" (名前の末尾に1Dが付いていない) がありますが、今回はこれは使用しません。

STEP1: ブレンドスペース1Dの作成

コンテンツブラウザを右クリックして、「アニメーション」 -> 「ブレンドスペース1D」を選択します。

f:id:r-ngtm:20180409185639p:plain


今回は Buff_Blackのスケルトンから使用するブレンドスペース1Dを作りたいので、Buff_Black_Skeleton を選択します
f:id:r-ngtm:20180409185919p:plain


名前ですが、RunIdleを合成するブレンドスペース1Dを作りたいので、名前を「BlendSpace1D_RunIdle」としました。
f:id:r-ngtm:20180409190141p:plain

ブレンドスペース1Dの編集

次にブレンドスペース1Dを編集していきます。

ブレンドスペース1Dをダブルクリックして開くと以下のような画面が表示されます。
f:id:r-ngtm:20180409190949p:plain:w500


今回は赤い字で示した部分を触ります。
f:id:r-ngtm:20180409190911p:plain:w500

STEP2: モーションの登録

アセットブラウザからIdle(待機モーション)をドラッグ&ドロップし、Blend Space Editor(左隣にあるウィンドウ)の端に配置します。
f:id:r-ngtm:20180409191723g:plain

アセットブラウザからRun_FWD(前方へ歩くモーション)をドラッグ&ドロップし、Blend Space Editor(左隣にあるウィンドウ)の端に配置します。
f:id:r-ngtm:20180409192125g:plain

以上を済ませると左側にIdleモーション、右端にはRun_FWDモーションが登録された状態となります。
f:id:r-ngtm:20180409192513p:plain:w350 f:id:r-ngtm:20180409192519p:plain:w350

補足: 下にある数字の意味

ここで、ウィンドウの下を見てみると数字が書かれていることがわかります。
これは
「Axis(軸入力) = 0.0のときにはIdleモーションを再生し、Axis = 100.0の時にはRun_FWDモーションを再生する」
という意味を表しています。

f:id:r-ngtm:20180409193021p:plain

ここで補足ですが、アニメーションBPからブレンドスペース1Dに対してfloat値を引数として渡すことができます。
この入力のことをAxis(軸入力)と呼びます。
f:id:r-ngtm:20180409194617p:plain

STEP3: ステートの作成

まずは最初に作成したアニメーションBP "AnimBP_Buff_Black"を開きます。 f:id:r-ngtm:20180409193553p:plain

次に、右クリックメニューからステートを作成してEntryノードと接続します。
f:id:r-ngtm:20180409193741g:plain
今回はIdleとRunをブレンドしたいので、ノード名を"Idle/Run"としました。

STEP4: ブレンドスペース1Dを使う

Idle/Runノードをダブルクリックして開き、右クリックメニューから"BlendSpace1D_RunIdle"を追加して最終アニメーションポーズへ接続します。
f:id:r-ngtm:20180409200144g:plain

ブレンドスペース1Dの挙動を確認してみる

Axis = 0.0の場合
f:id:r-ngtm:20180409201313g:plain
Idleモーションが再生されます。


Axis = 100.0の場合
f:id:r-ngtm:20180409201450g:plain
Runモーションが再生されます.

Axis = 50.0の場合
f:id:r-ngtm:20180409201734g:plain
IdleモーションとRunモーションが1:1の割合でブレンドされて再生されます。

STEP5: キャラクターの移動スピードをアニメーションに反映する

実際にキャラクターを走らせるため、もうひと手間加えます。

AnimBP_Buff_Blackのイベントグラフタブを選択し、以下のようなノードを組みます。
f:id:r-ngtm:20180409204532p:plain

キャラクターの移動速度ベクトルの長さを計算して、変数Speedに代入しています。


次に、Idle/Runノードを開いてブレンドスペース1Dに変数Speedを接続します。
f:id:r-ngtm:20180409205108p:plain

補足: 挙動について軽く説明

キャラクターが速く移動しているときはSpeedが100に近づくので、BlendSpaceのAxis=100.0に登録されたRunモーションの比重が大きくなります。
移動が遅くなるとSpeedが0に近づくのでBlendSpaceのAxis=0.0に登録されたIdleモーションの比重が大きくなります。

遅く移動しているときはIdleモーションが再生され、速く移動しているときはRunモーションが再生されます。

STEP6: キャラクターを移動させてみる

実際にキャラクターを移動させてアニメーションを確認してみます。

まずは BP_Buff_Blackをダブルクリックして開き、「イベントグラフ」タブを開きます。
f:id:r-ngtm:20180409203551p:plain

Tickノードに"Add Movement Input"ノードを接続します。 WorldDirectionには(1,0,0)を入れておきます
f:id:r-ngtm:20180409203732p:plain

この状態で再生を押すと以下のようなRun_FWDモーションが大きくブレンドされた動きになります。
f:id:r-ngtm:20180409210006g:plain


移動速度を下げるとIdleモーションが大きくブレンドされた動きになります
f:id:r-ngtm:20180409210407p:plain
f:id:r-ngtm:20180409210240g:plain