何番煎じか UnitychanをUnreal 4.14で読み込む。 アニメーションステートマシン作成
はじめに
何番煎じか不明だが UnityChanモデルの読み込み 触った感じ 4.14になっても ほとんど変わってないので 本当に何番煎じか・・
前回は UnityChanが操作できるが Tポーズなので 今回は 待機モーション、ジャンプ等を作る
最低限のアニメーション設定(待機、Jump)
Unitychanのボーン情報を使ったアニメーションBluePrintの作成
名前を BP_AnimUnitychanにしました
ThirdPersonCharacterのAnimationを 先程のBlueprintに設定
BP_AnimUnitychanをダブルクリックし AnimGraphを開き New StateMacheneで ステートマシンを新規に作り FinalAnimationPoseに繋ぎ ステートマシンの結果が反映されるようにする
待機モーション ステートマシーン作成
ステートマシンをダブルクリックする New StateJuを選び Idleと名前をつける
Idleステートをダブルクリックし Idleを実装する
Play xx で再生するアニメーションを選ぶ 無難なのは unitychan_WAIT00 なのでとりあえずそれを。
実行すると今までTポーズだったのが 待機モーションになっている
もちろん 歩きもジャンプも実装されてないので常に待機モーション。 時々Tポーズが一瞬出るのが気になるが とりあえず待機は完成
ジャンプ
StateMacheneにジャンプを追加 JumpStart、JumpLoop、JumpEnd の3つのステートを作成し 図のように繋ぎます この矢印の方向にしか ステートはかわらないので、矢印重要!
矢印の上の記号は、遷移するための条件を指定するもので、あとで設定します
そして JumpStart、Loop、End にアニメーションを設定したいのですが問題発生 UnityChanは その3つが分離されてないので、分離しなければなりません
CreateAnimComposite
アニメーションの部分再生を使います
コンテンツブラウザのUnityChan_Skelton右クリックし、Create->AnimationComposite できたAnimationCompositeを Unitychan_Jump00B_Start にリネーム ダブルクリックする (アニメーションモンタージュでも出来そうだが、どちら使うのがいいのかな?)
右下のAssetBrowserから unitychan_JUMP00Bを選ぶ
タイムラインをクリックすると Detailsが出るので、StartTime EndTimeを入れる 例えばわたしは Start0.3 End0.7にしてみた
本当は ジャンプ前のしゃがみモーションや、着地時のしゃがみモーションがついているので、それも再生行いたいが 少し処理が必要になるので、後日ということで
同じく Loopは Start0.7 End0.71、 Endは Start1.0 End1.85に
Jumpステートマシンにアニメーション設定
ステートマシンより JumpStart、JumpLoop、JumpEndをダブルクリックし、アニムグラフを表示 それぞれにCompositeを設定する 補間では出てこなかったのでその場合はAssetBrowserから引っ張ってくると良い
ステートマシン 条件追加
このまま実行しても IdleからJumpに遷移しないため 条件追加していきます
色々なやり方あると思いますが、今回はAnimationのTickで、空中かどうかでみます おそらく、ジャンプではなく落下も考えると ジャンプボタン押したかの判定で行うようになるかもしれません
アニメーションブループリントの Variablesに bool型のIsInAir変数を作る。デフォルト値はfalseで
BluePrint作成。アニメーションブループリントのEventGraphiで、キャラが空中の場合上記フラグを立てる
ステートマシンの、IdleからJumpStartへの遷移をダブルクリックし、 IsInAirフラグが立てば遷移するようにする
StartからLoop、EndからIdleには、アニメーション終了したら遷移するよう 以下のBluePrintを使う
LoopからEndはとりあえず IsInAirがFalseになった時にしておこう・・・
実行するとジャンプするが、StartとEndが繰り返されるので、StartとEndは Loopを外す
とりあえずは出来た
歩き/走り
待機モーション ピクピク対応
待機モーションが一瞬Tポーズ出るので 上記と同じように AnimationCompositを使い Wait00の頭を抜いて再生する。 例えば StartTime0.1 EndTime2.95
Idleステートマシンのモーションにそれを設定すると ピクピクがなくなる
やること
ブレンドスペース1Dを使う。 ブレンドスペース1Dは、1つのパラメータにより アニメーションを合成できる 2Dだと2つのパラメータで合成。3D以降は予定されているが未実装
今回は Speedパラメータを使い、Idle->walk->run を合成する
とりあえず慣例にしたがい Idleステートマシンを Idle/Runにリネーム
Spped
Speedパラメータを設定
アニメーションブループリントのVariableにて float型のSpeed変数作成 EventGraphにて Velocityの大きさを渡す
BlendSpace1D
ボーンを選び Create->BlendSpace1D を選択 例えば unitychan_BS1Dという名前にした
これをダブルクリックするとBlendSpaceが開かれる 左上の DisplayEditorVerti をチェックし 画面中央右の X Axis Labelに Speedを。 Rangeは グレーマンにみならって 0-375にした Speed0に Wait0 (AnimationCompositeやMontageは指定できなかったのでTポーズが出る・・) Maxに Run、間にWalkを入る あとで画面動かしながら 確認しよう
ステートマシンに反映
Idle/Run ステートのピンを 先程作った BlendSpaceに変更する またSpeedパラメータを渡す
実行するとそれっぽい動作をするはず
問題点
Wait0ポーズの開始時のTポーズが出てしまう (BlendSpaceに AnimationCompositeもMontageも指定できなかった) ジャンプ着地時に動いたら滑ったようになる