サードパーソン ブループリント ゲーム入門 (10) – AnimGraph を組む

ビデオの内容紹介 
前回、ステートマシンとは何かについて説明されていましたが、今回は、そのとおりにステートマシン本体を組んで行きます。(ステートマシンを制御する変数などについては、次回以降となります。)

原題 Introduction to Third Person Blueprint game – 10 – Building the AnimGraph

まず、コンテンツ ブラウザで CharacterAnimBP を開きます。
10-1
モードを「グラフ」にします。
10-2
スペースで右クリックして、メニューから [新規のステートマシンを追加する] を選択します。
10-3
ステートマシン名を Locomation (意味は「移動」くらいでしょうか) にします。
10-4
この Locomation をダブルクリックします (Locomotion の内部に入ります)。
10-5
ここで Entry から左クリックしながらドラッグして放すとメニューが表示されるので、そこから、[ステートを追加] を選択します。
10-6
この新たなステートに Idle_Walk_Run という名前を付けておきます。
10-7
このステートをダブルクリックして、ステート内部を開きます。
10-8
下のタブを [アセット ブラウザ] に切り替えて、アセット (ファイル) から Idle_Walk_Run をドラッグアンドドロップすると、
10-9
Idle_Walk_Run というステートによる最終的なポーズが、このアセットとなります。
10-10
ところで、この Idle_Walk_Run を制御するのは、前々回のチュートリアルで見たように、キャラクターの速度 (プレイヤーが動かすキャラクターの速度) でした。
10-11
そこで、その速度をここで供給することにします。つまり、プレイヤーの操作による「速度」 → その値を変数に入れる (=これは次回チュートリアルでやります) → この変数が Idle_Walk_Run のブレンドスペースの入力を変化させる (=これがこれからやろうとしていることです) → ブレンドスペースの入力によって最終的なアニメーションが決定される、という流れになります。

そのためには、Idle_Walk_Run のノードの Speed という入力ピンからドラッグして、メニューを開き、[変数へ昇格] をクリックします。
10-12

名前を Speed という変数にします。ここにゆくゆくはプレイヤーの操作による「速度」が入ることになります。
10-13

ここで、Locomotion に戻り、Locomotion ステートマシンと [最終アニメーション ポーズ] をリンクして、コンパイルしてみます。
10-14
そして、左側の [アニメーション ブループリント] タブの [デフォルト] 欄の Speed プロパティを上げていくと、その上のプレビューでキャラクターのポーズが変化します。
10-15
まだプレイヤーの操作によるものではありませんが、このように、変数 Speed の値によってアニメーションが変化できるようになったことが確認できます。つまり最初のステートがちゃんと動作することを確認できました。

次に、JumpStart というステートを作ります。JumpStart は、ジャンプが始まる時のアニメーションです。まず、Locomotion 内部に戻り、
10-16
Idle_Walk_Run ノードからワイヤーをドラッグして放し、表示されるメニューから、[ステートを追加] を選択して、JumpStart という名前を付けるだけです。
10-17
そして、この JumpStart をダブルクリックして、内訳を開き、
10-18
JumStart のためのアセット (アニメーション ファイル) をドラッグします。
10-19
次に、Idle_Walk_Run ステートから JumpStart ステートに向かう矢印についている丸いマークをダブルクリックして、transition (遷移) のルールを設定します。
10-20
transition (遷移) のルールとは、あるステートから別のステートに移行するための条件と考えることができます。

画面に表示されている [結果] ノードの [Can Enter Transition] (遷移に入ることができる) というピンからワイヤーをドラッグして放し、
10-21
メニューから [変数へ昇格] を選択。
10-22
その変数名に IsInAir? (空中にいるか?) という名前をつけます。
10-23
この IsInAir? という変数には、次回のチュートリアルで値を入れるようにします。

IsInAir? という条件が満たされれば、Idle_Walk_Run ステートから JumpStart ステートに移行することになります。つまり、キャラクターが空中に浮いていれば、ジャンプの始動アニメーションが実行されることになります。

次に、これまでと同じようなやり方で、JumpLoop というステートを作ります。
10-24

ここでも JumpStart と JumpLoop の間にあるルールのマークをダブルクリックして、移行の条件を設定します。ただし、今回のルールは、JumpStart のアニメーションが残り 10% になった時点で JumpLoop ステートに移行するというものです。そこで、スペースを右クリックしてメニューを表示させて、検索欄に timeremain などと入れます (ただし、[文脈依存] のチェックを取りました)。表示される TimeRemainng (比率) for ‘Jump_Start’ (Jump_Start について残っている時間)を選択します。
10-25
さらに、この TimeRemainng ノードからワイヤーをドラッグして放し、表示されるメニューで「<」を検索欄に入れて、Float < Float を選択します。 10-26
Float < Float の値を 0.1 (つまり 10%) にして、次のようにワイヤーをつなぎます。
10-27
これによって、JumpStart のアニメーションの残りが 10% より小さい場合に、JumpLoop ステートに移行することになります。

なお、Locomation 内部に戻って、ルールマークにマウスオーバーしても、今の設定が確認できます。
10-29

また、JumpLoop ステートをダブルクリックして、JumpLoop のためのアセットもこれまでと同じように設定します。
10-28

次に、JumpEnd ステートも作り、他のステートと結びます。
10-30

JumpEnd ステートをダブルクリックして、JumpEnd のためのアニメーション ファイルもセットします。
10-31

JumpLoop ステートから JumpEnd ステートへの遷移ルールを設定します。そのルールは、キャラクターが物理法則に従って落下して、もはや空中にはいなくなった時ということになるので、先に作った変数 IsInAir? を利用します。
10-32
「空中にはいない」のだからこれを否定する必要があります。スペースで右クリックして表示されるメニューで「!」を検索欄に入れて、NOT Boolean という関数を選択します。Not Boolean 関数は、その bool 値 (true または false) の反対の値 (true ならば false、false なら true) を返す関数です。
10-33

キーワード Boolean
「bool 型」という意味です。bool 型は変数のタイプの一種です。bool 型の変数がもてる値は true (正しい) と false (正しくない) のみです。もしもあるキャラクターが空中にいれば、IsInAir? という変数には true という値を入れることにします (次回チュートリアルで)。空中にいなければ、IsInAir? 変数には false を入れることにします。この bool 型の前に NOT をつけると、その値が反転します。つまり、IsInAir? 変数に false が入っていてそれに NOT をつけると true になります。なぜこのようなことをするのかと言えば、[結果] ノードの [Can Enter Transition] (遷移に入ることができる) というピンは、bool 型変数によって値が供給され、その値が true の場合しか受け付けない (それ以降実行されない) からです。だから false の場合は NOT をつけて true にしてから、そのピンに結びつけているのです。

さらに、JumpEnd ステートから Idle_Walk_Run ステートに移行するためのルールをセットします。ここでも JumpEnd のアニメーションが残り 10% を切った時に移行することにします。
10-34

最後に調整として、JumpStart から JumpLoop に移行するルールを 10% ではなく 50% にして、スムーズなアニメーションにしています。
10-35

今回はこれでお終いです。次回は、このステートマシンの前段階、つまり変数への値の入れ方などを学びます。お疲れ様でした。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする