Unreal Engine4: 公式サンプルから学ぶモーション処理

23/06/2017

Programing UnrealEngine4

本記事は UnrealEngine 4.16.1 を使用


ゲームを作るうえでキャラクターのモーション処理はかかせません。
公式サンプル ThirdPerson を使って、モーション処理を学びましょう。


目次

0.準備

公式サンプルプロジェクト ThirdPerson を使用するので、新規プロジェクトで ThirdPerson を選択します。

1.アニメーションブループリントの中身を理解する

ThirdPersonCharacter ブループリントの Details → Animation → Anim Class を見てみると ThirdPerson_AnimBP が指定されており、このアニメーションブループリントが各モーションの再生を担当しています。

1.1 アニメーションブループリントを開く

それではそのアニメーションブループリントを開いてみます。

Contents Browser → Mannequin → Animations → ThirdPerson_AnimBP をダブルクリックすると以下のようなウィンドウが表示されます。

My Blueprint → Graphs → AnimGraph をダブルクリックし Anim Graph を開きます。

更に Default をダブルクリックした先が、ThirdPersonCharacter のモーションプロセス設定場となります。

四角い枠に囲われた "Idle/Run" や "JumpStart" 等にはモーションが格納されています。
矢印は遷移の経路を表し、矢印付近の白丸には遷移ルールが格納されています。

さて、ここで一旦ゲームをプレイしてみると、自キャラの動きは
  1. アイドル(止まっている状態)
  2. 移動(キーボードでは走り、ジョイスティックでは傾きに応じて歩きか走り)
  3. ジャンプ
の3つで構成されていることが確認できます。

再びチャートを見てみると、ジャンプの処理は何となく見えてきます。
ただ、ジャンプ関連の遷移チャートはありますが、アイドルと移動の遷移チャートは無い。
ということは、アイドルと移動は一つの "Idle/Run" で制御しているということになります。

大枠が分かったところで、細部をつめていきましょう。

1.2 アイドル・移動アニメーション合成の処理

まず、アイドルと移動のモーション処理から見ていきます。

"Idle/Run" をダブルクリックすると以下のグラフが開きます。

このチャートを見ると、アイドルと移動の切り分けは Speed パラメータで処理していることが分かります。

この中の "ThirdPerson_IdleRun_2D" をダブルクリックすると、アニメーション割り当ての画面が表示されます。

画面の赤枠で囲った範囲の左上のタグマークを押すと、各白い点に名称が表示されます。
一番下には Speed と記載され、これが横軸をスピードとしたグラフであることが分かるでしょう。

グラフ上で Shift キーを押しながらマウスカーソルを動かしてみましょう。中央の緑色の点が動き、その点の位置によってプレビューのマネキンが歩いたり走ったりする様が見られます。

これはアイドル、歩き、走りの各モーションをグラフ上に配置することにより、Speed の値によってうまく合成してくれる機能なのです。これで Speed 値一つでアイドルと移動をセットにできる仕組みが分かりました。

ちなみにグラフの横軸設定は Asset Details → Axis Settings で変更可能です。

1.3 ジャンプの遷移処理

次にジャンプの遷移を順に見ていきます。

ThirdPerson_AnimBP → Anim Graph → Default の画面に戻り、"Idle/Run" と "JumpStart" を結ぶ矢印上にある白丸をダブルクリックして遷移条件を見てみます。

Is in Air? という Boolean 変数が true であれば遷移する条件であることが分かります。この変数はその名の通り、空中にいるかどうかを管理する変数です。

Default チャートへ戻り、"JumpStart" のアニメーションを確認("JumpStart" ダブルクリック → "Play ThirdPersonJump_Start" ダブルクリック)すると、ジャンプした瞬間のアニメーションであることが分かります。

次の "JumpStart" から "JumpLoop" への遷移条件は以下となります。

これは ThirdPerson_Jump_Start のモーション再生残り時間が1割を切ったときに遷移するという条件になっています。

続いて "JumpLoop" から "JumpEnd" への遷移条件は以下となります。

Is in Air? 変数が false になったら(もう空中にいないとなったら)遷移するという条件。これで着地のモーションへ遷移します。

最後に "JumpEnd" から "Idle/Run" への遷移条件は以下となります。

着地モーションの再生残り時間が1割を切ったときに遷移します。

これで遷移の経路と条件は理解できました。
しかし Speed や Is in Air? 変数の値がどのように処理されているかはまだ見ていません。

1.4 遷移に必要な変数の処理

今回の場合、Speed 等の変数は Event Graph で管理されています。Event Graph タブを開いてみましょう。

この "Event Blueprint Update Animation" は、"Event Tick" のように定期的に実行されるイベントです。

ここで "Get Pawn Owner" からキャラの空中判定 "Is Falling" や移動速度 "Velocity Length" を抽出して、各変数に格納しているわけです。

2.まとめ

公式サンプルを通して、モーション遷移の処理が理解できました。
これらにモーションを追加したり一から設定する場合の処理も学ぶ必要があるため、今後記事にしていきたいと思います。

Major Contents

ブログ アーカイブ

Contact us

名前

メール *

メッセージ *

QooQ