UE4のテンプレートに自分で作ったキャラを入れて動かしたい そのハチ
怒涛の勢いで第8回!
今回の記事を読み終われば、自分で作ったキャラクタがUE4のテンプレートで自由に動かせるようになりますよ!
とはいえお膳立ては必要です。そう、基礎知識!
↑の図を見てください。
これがUE4における最小限のキャラクタ構成の概念図です。
前回までの記事で、すでにFBXからスケルタルメッシュは作成できています。マテリアルも親マテリアルから子マテリアルであるマテリアルインスタンスを作成しました。
それではまだ足りないもの、つまり「アニメーションBP(BPはブループリントの略)」と「キャラクターBP」を作成すれば良いのでしょうか。
ん?ちょっと待ってくださいよ?
だって!せっかくThirdPersonテンプレートからプロジェクトを作成したのだから、すでにマネキンさん(以前はブルーマンさん)が動いていますよね?ということはすでに、アニメーションBPもキャラクターBPも用意されているはずです。
キャラクターBPを見てみよう
↑の画像の手順でキャラクターブループリント(BP)を開いてみましょう。
- コンテンツブラウザでコンテンツ→ThirdPersonBP→Blueprintsへ移動
- ThirdPersonCharacterをダブルクリック→エディタが開く
- 色々難しそうなノードが並んでいるけどスルーして、ビューポートタブをクリック→画面が3Dビューになってマネキンさんが表示される
- 左ペインでMesh(継承)を選択
- 右ペインにアレコレと表示される。
さて、画像では汚い手書きで7,8とメモ書きしてある「スケルタルメッシュ」の項目を見てください。プレビューアイコンの隣のプルダウンメニューをクリックすると…おやおや、FBXからインポートした標準すたちゅーさん(または自作のキャラクタ)が、ちゃんとスケルタルメッシュとして選択候補にありますよ?
だったら早速!とりあえずメッシュを変更しちゃいましょう!
まだすたちゅーさん用のアニメーションBPは作成していませんので「Animation」の項目のAnim Classは「なし」になってしまいますがそのままで構いません。
すると、ツールバー下のコンパイルアイコンが変化します。これは「ブループリントに変更があったので、コンパイルしなおせよな!」という訴えもしくは請願だと思いましょう。悲痛ですね。
「よしよし仕方ないね」とばかりにコンパイルボタンをクリックすると、あっさりアイコンが正常モードに戻ったはずです。
このように、ブループリントはなにか変更をするたびにコンパイルを求めてくるかわいいヤツです。存分にかわいがってあげましょう。
↑その結果がコレ!
メインエディタの3Dビューで「プレイ」すると、まったく身動きしない標準すたちゅーさんが「そこはかとなく不気味なほど静かにだが着実に動かせる」ことが分かるはずです。すばらしい!あと一歩な感じがしてきましたね!
つまり、これがThirdPersonテンプレートなどのサンプルプロジェクトを利用する最大の目的です。すでにキーボードやマウス、ゲームパッドなどの入力に応じてキャラクタを「動かす」部分は用意されているので、あとはメッシュを差し替えたり、アニメーションブループリントを作成すればチャチャチャっとゲームの基本部分ができあがってしまうのです。
ではアニメーションBPだ!
先ほどのキャラクターBPと同様に、アニメーションBPを開いてみましょう。ターゲットは「ThirdPersonAnimBP」です。
よっしゃこいつもワケ分からんけどさっきと同じく中身を入れ替えれば!と思うのですが…残念ながらアニメーションBPは「スケルタルメッシュのスケルトンに紐づけられるモノ」なので、根本的に「サクサク入れ替え」というわけにはいきません。がっかり!
たとえば無理やり複製したとしても、結局はもとのスケルトンに紐づけられたままのブループリントが出来上がるだけで、なんの解決にもなりません。
しかし…しかしですよ?相手が「スケルトン」であるならば、リターゲットという方法があるのです!これは一般の3Dソフトのリグ(ボーン)でも必ずある「あるリグで作成したアニメーションを別のリグに移植する手段」ですね。
というわけで、早速アニメーションBPをリターゲットしてみましょう。
ABPのリターゲット
はい、手順は簡単です。
まず、ThirdPersonAnimBPを選択状態にして右クリック、続いてポップアップするダイアログの上段3つ目にある「Animブループリントをリターゲットする」→「Animブループリントとリターゲットを複製」をマウスオーバーで選択し、決定します。
↑続いて、こんなダイアログが出てきますので
- 互換性のあるスケルトンのみを表示のチェックボックスを外す
- 左ペインにFBXインポートしたスケルトン名が表示されるので選択
- ビューの「ターゲット」の表示が変わる
- 右ペイン下の「Folder」をChangeでパス指定する。(例では前回作成したAnimationフォルダを選択した)
- 左ペイン下の「Reterget」ボタンをクリック
以上の手順で自動的にアニメーションBPがリターゲットされて複製されます。
するとフォルダも自動的に移動しますので「ThirdPersonAnimBP」と「ThirdPerson_IdleRun_2D」の名前を「StatueAnimBP」などと分かりやすいように変更しましょう。名前を変えるのは上記二つのアセットだけで構いません。
さて、コンテンツブラウザをじっくり見てみると、リターゲットされたアニメーションも複製されていますが、当然「むりやり」マネキンさんのアニメーションをすたちゅーさん(または自作キャラ)に移植しただけなのでえらいことになっています。
そこで今度こそアニメーションBPを正しい状態に「差し替える」作業に入るわけですが、下準備はひとつだけ。先ほど名前を変更した「~IdleRun_2D」という見慣れないアセットを開きます。
ブレンドスペースの作成
実はこの作業、いちいちリターゲットなどしなくても、手作業でどうにでもなります。しかし、せっかくなのでこのまま進めましょう。例のごとくダブルクリックで「なんとか2D」を開いてください。
作業手順は
- 中央ペインにある円状のポインタを選択してすべて削除する。
- 右ペインにあるアセットブラウザの名前欄を広げて見やすくする。
- ~~idle(待機モーション)を中央ペインの軸上一番下の「Speed0.00」にドラッグドロップで置く。
- 同様に、中央ペイン区切りひとつ上の交差軸に「歩きモーション」を、一番上のあたりに「走りモーション」をドラッグドロップする。
- 中央ペイン縦軸上でマウスカーソルを動かし、アニメーションが変化するのを見て喜ぶ。ついでに「ほほー」とつぶやくと寂しさが増す。
- 無事に動いているのを確認したら左上の「保存」ボタンをクリックしておく。
以上になりますが、このアニメーションエディタでは、こうしたブレンドスペース以外に通常のアニメーションも編集/調整が可能です。もしも歩行アニメーションがゆっくりすぎるなぁ、などと感じた場合は、左ペイン株にある「RateScale」を1.1以上にすれば再生速度(正確には倍率)が速くなったりします。
アニメーションBPの仕上げ
それでは再びアニメーションBPを開いて仕上げに入ります。もうちょっとですよ!
本来はアニメーションBPのイベントグラフの構築法だとか、これから手直しするアニムグラフとステートマシーンの意味や作成法をきちんと学ぶべきです。しかし本連載の主旨は「手っ取り早く自作したキャラをUE4で動かすこと」にありますので、苦労して学んだけどよく分からなかったよパトラッシュ…なんて挫折することなく、まず先に「すげー!たのしぃーーーー!!!」って感じてもらい、そこで飽きればそれで良いですし、よしこれすごい楽しいからきちんと仕組みを勉強しよう!と思えばそれでも良いよね?というスタンスです。
それでは、上記キャプチャ画像が示す通りに「Idle/Run」というステートを開いて中身を見てみましょう。
ここに、先ほど作り直したブレンドスペース1Dの「IdleWalkRun」があります。これは「Speed」という変数の値に応じて待機モーションから走りモーションまで連続変化させるよ!というステートなのです。なお、このステートはせっかく開きましたが先の作業で正しく修正してありますので「見ただけ~」ですよ!
続いて、Defaultステートマシーンに戻り、今度は「JumpStartステート」の中身を開いてみましょう。
↑今度は先に「無理やりリターゲットしただけのアニメーション」がそのまま入っています。そこで、FBXからインポートした正常なアニメーションに中身を入れ替え「最終アニメーションポーズ」の入力ソケットに接続しなおします。
同様にして「JumpLoop」と「JumpEnd」のステートも中身のアニメーションを入れ換え、ソケットを接続しなおしてください。この作業が終われば、無理やりリターゲットしたアニメーションは削除してしまって構いません。
最後の仕上げですよ!
すべてのステートの中身を入れ換えたなら、あとほんの少しでアニメーションBPが完成します。
↑の画面キャプチャの赤丸を確認してみましょう。
この「ステートマシーン」と呼ばれる仕組みは「待機→歩き→走る」や「ジャンプ」などのそれぞれの動作を「ステート」と呼び、それらを「条件に応じて遷移させる」という仕組みです。しかし、遷移条件が元のThirdPersonアニメーションに紐づいたもののままになっているので、このままでは機能しません。
しかもですよ!UE4エディタのバージョンアップによって、まったく同じノードが使えなくなっているのです。困った!
いやいやwもちろんより扱いやすい「新型ノード」が用意されているので安心してください(煽りかよ)。
それではマウスオーバーすると黄色くなる遷移条件をダブルクリックしましょう。
もともとあった遷移条件は「JumpStartアニメーションの再生時間が残り10%を切ったら」次のステートに移動していいよ?というルールでした。しかし、前記したようにまったく同じ(旧式の)ノードが出てこなくなっているので、新たなノードを使用します。
- 空きスペースでクリック
- 検索欄に「timeremaining~」と入力→候補が出てくる
- GetRelevantAnimTimeRemainingFraction(JumpStart)を選択
- <ノードのソケットに接続しなおす
- 元のノードは削除
以上で修正終了です。
ついでですので説明すると、この「新たなノード」は、従来はスケルトン固有のアニメーションの再生割合を条件にしていたのに対し、ステート自体のアニメーションを参照するノードのようです。つまり、ステートの中身がどのスケルトンにもとづいたアニメーションであっても機能するノードのようで、より汎用性が高くなっているのですね。
それでは同様に、JumpEndからIdle/Runに向かう矢印の遷移条件も修正しましょう。やることはまったく同じで、この2か所以外の遷移条件は修正しなくても機能しますので手直しは必要ありません。
最後にアニメーションBPをコンパイルしなおし、保存しておきましょう。以上でアニメーションBPの作業も完了しました。
キャラクター差し替え完了!
ここまで作業をしてきたなら、最後の作業はもう分かりますよね。はい、キャラクターBPのアニメーションBPが空っぽのままです。早速ブループリントを開いて設定してみましょう。
↑もはや詳細説明はいらない気もしますがw
- ThirdPersonCharacterブループリントを開く
- Mesh(継承)を左ペインで選択
- 右ペインの「Animation」欄で完成したアニメーションBPを選択する
- コンパイルして保存
やりましたね!完了ですよ。早速レベルをプレイしてみましょう。
それでは最後にUE4のサンプルプロジェクトもリンクしておきます。
次回は番外編として、ひと手間加えたキャラクタに仕上げますよ!