Tuesday, November 13, 2018

Amazon Lumberyard学習メモ:モーションブレンドとミラー

キャラクター改良の続きです。
今回は前後左右の移動に専用のモーションを割り当てる作業です。斜め移動の際は各モーションがブレンドされます。
あわせて、右方向のモーションをミラーして左方向のモーションとして使う手順も説明します。

参考資料:Amazon Game TechのYoutubeチャンネル

作業に先立ち、Mayaで後方移動と右移動のモーションを作成して、FBXファイルとして以前作った専用フォルダに配置しました。


ここからLumberyardでの作業です。
まずモーションミラーのセットアップを行います。ミラー設定はモーションにではなくActorに対しての作業になります。
Animation EditorのFile - Open Actorで使っているActorを開きます。


Actorが開きました。


View - Actor Managerを実行します。


Actor Managerが開きます。Mirror SetupのClick to setupをクリックします。


"Left:"と"Right:"に、キャラクターの各ジョイントに付けた左右のプレフィックスを入力します。(今回は"L_"と"R_"を使っています。)


入力が終わったら、右にあるPerform name based mappingアイコンをクリックします。


処理が実行された事を示すウィンドウが表示されますので、OKをクリックします。
Mirror Setupビューの下カラムにマッピング結果が表示されています。


セットアップが終わったらセーブアイコンからセーブします。

Mirror Setupは以上で終了です。ビューを閉じます。

続いて新規モーションの追加です。これは以前行ったのと同じ手順です。
追加が終わったらモーションセットをセーブします。


次はモーションブレンドのセットアップです。
以前作ったAnim Graphを開きます。


Anim Graphのパラメータに、モーションブレンドのウェイト値として使うfloatパラメータを追加します。範囲は0.0〜1.0です。


名前はDirectionとしました。


Anim Graphで、マウス右クリックで出るメニューからBlend Treeを選びます。


Blend Treeノードが追加されました。


以前State Machineに行ったのと同じ手順でトランジションを作成します。条件式には以前作ったGoパラメータを使い、値が3の時にBlend Treeに入り4の時に抜ける様に設定しました。


Blend Treeノードをダブルクリックして開きます。中はこの様になっています。


Blend Nノードを追加します。


Blend Nノードが追加されました。


Motionノードを追加します。


Motionノードが追加されました。


Motionノードを選択した状態で、アトリビュートからモーションをロードします。


選択しているMotionノードに前進モーションがロードされました。


同じ手順で、4個のMotionノードに前進モーション・後退モーション・右移動モーション2個を割り当てました。


右移動モーションの内の1個を選択し、アトリビュートのMirror Motionにチェックを入れます。これでモーションがミラーされ、左移動モーションとして使える様になります。


Parametersノードを追加します。


Parametersノードが追加されました。ノードには、現在Anim Graphが持っているパラメータが表示されています。


Anim Graphにある全ノードを下図の様に接続します。

先ほどAnim Graphに追加したDirectionパラメータをモーションブレンドのウェイトとして使っています。これで、Directionパラメータの数値を0.0から1.0の間で変化させる事によって各モーションがブレンドされながら変化する様になりました。
各モーションノードの順序は前回作成したスクリプトに従っています。後方が0.0で、そこから値が上がるにつれて左→前→右となり、1.0で再び後方に戻ります。

モーションブレンドのセットアップは基本的にこれでOKです。
Anim Graphをセーブします。


ここからは細かい調整です。
モーション間のガタつきを抑える為、Blend NノードのアトリビュートでSync ModeをFull Clip Basedにします。


Motionノードのアトリビュートで再生スピードの調整を行います。これは実際に表示してみてからの作業になります。


Blend Treeへのトランジションの時間を調整します。これが長いと移動し始める時に足が滑ってしまうので、デフォルトより短めにしました。


作業が終わったらAnim Graphをセーブします。


前回作ったスクリプトを使ってキャラクターのスクリプトを改造します。前回作った「アナログスティックの角度を0.0〜1.0の数値に変換するスクリプト」の結果部分を、先ほどAnim Graphに追加したDirectionパラメータ(モーションブレンドのウェイトとして使っているパラメータ)に接続しています。これで、アナログスティックの角度に応じてモーションブレンドが変化する様になりました。
前に作った前進モーションを表示する部分は、必要無くなったので削除します。


結果はこんな感じです。

No comments: