Tuesday, October 2, 2018

Amazon Lumberyardで自作のキャラクターモデルを動かしてみる(4) -モーション遷移(2)-

前回に引き続きモーション遷移を作っていきます。
今回は、前回作成したTransitionに条件式を設定し、条件が合う時にノード間の遷移が実行される様にします。条件式に使う値はAnim Graphのパラメータとして用意します。

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

エディタのどこかにParametersというビューが開いているはずですので探して下さい。
これは現在のAnim graphに属するパラメータを表示する場所です。
表示されていない場合はViewメニューを開き、Parameters Windowにチェックを入れて下さい。


ParametersビューのAdd new parameterアイコンをクリックします。


Create Parameterウィンドウが開きます。


Values typeをFloat(slider)に、NameをGoに、Maximumを10に設定し、Createをクリックします。


Goという名前のパラメータが、現在のAnim graphに追加されました。


同じ手順を使って、NameをSelectに、Maximumを10に設定したパラメータを作成します。


ここから、Anim GraphビューでTransitionにCondition(条件)を設定していきます。
Anim Graphビューの左上のRootをクリックし、Motion0とStateMachine0の遷移を表示します。


Motion0からStateMachine0に向かうTransition(矢印)をクリックで選択します。


Attributeビューを見て下さい。
現在選択しているTransitionのアトリビュートが表示されています。


Add conditionボタンをクリックします。これは、このTransitionのアトリビュートに条件式を追加する為のものです。


Select A Conditionウィンドウが表示されるので、Parameter Conditionを選んで、Add Conditionをクリックします。


現在選択しているTransitionのアトリビュートにParameter Conditionが追加されました。


Parameter ConditionのSelect Parameterボタンをクリックします。これは、この条件式で使う値を指定する為のものです。


Parameter Selection Windowが表示されます。ここには、先程作成した二つのパラメータ"Go"と"Select"が表示されています。


Goを選択してOKをクリックします。
Parameter ConditionでGoパラメータの値を使う様に設定されました。


Test Functionをparam==testValueに、Test Valueを1.0に設定します。

これで、「Anim graphのGoパラメータの値を1.0にセットすると、このTransitionが有効になる」という状態になりました。

続いて、StateMachine0からMotion0に向かうTransitionを選択します。


こちらのTransitionにも全く同じ手順でConditionを設定します。
ただしこちらはTest Valueを2.0に設定します。


ここで、Transitionに設定した条件式が正しく動くのかテストしてみましょう。
AnimGraphビューを見てください。
二つのTransitionのどちらにも、中央に赤い小円が表示されています。これはTransitionがオフである事を示しています。
(注・この小円は通常時は表示が出ない事があるのですが、モーションを再生する時には必ず表示される様ですので、表示されなくても気にしないで先の説明に進んで下さい。)


このテストでは、Anim Graphのパラメータの値を変える事でそれぞれのTransitionをオンにしてみます。
まずAnim GraphでMotion0ノードをクリックで選択して黄色にします。


その状態で、Active Animgraph/Stateアイコンをクリックします。


するとMotion0がアクティブになります。


ここでParametersビューを見て下さい。Goパラメータには現在、デフォルト値の0.0が入っています。


Goパラメータを1.0にしてみて下さい。


すると、Motion0からStateMachine0に向かうTransitionの中央の赤い小円がグリーンになります。これはTransitionがオンになったという表示です。これでMotion0からStateMachine0への遷移が実行されました。


続いて、Goパラメータを2.0にしてみて下さい。


今度は逆側のTransitionの中央の小円がグリーンになります。
これでStateMachine0からMotion0への遷移が実行されました。


Transitionの切り替えが確認できたので、モーションを停止させます。
Animation EditorのViewメニューでCommand Barにチェックを入れると、Animation Editor画面の下端にCommand Barが表示されます。その中のStop all motionsボタンを押すとモーションが止まります。
(注・Command Barが表示されない場合は、ViewメニューでOpenGL Render WindowとAnim Graph以外のすべてのチェックを外し、その後でCommand Barのチェックを入れてみて下さい。)

これでテストは終了です。

次に、StateMachine0ノードの中にある各Transitionに対して同様に条件式を設定していきます。
Anim GraphビューでStateMachine0ノードをダブルクリックし、内容を表示します。


EntryNode0とMotion1を結ぶTransitionをクリックして選択します。


Attributeウィンドウに選択しているTransitionのアトリビュートが表示されています。Add Conditionをクリックします。


Select a conditionウィンドウが開きますので、Parameter Conditionを選択し、Add Conditionをクリックします。


AttributeにParameter Conditionが追加されました。
Select parameterをクリックします。


Parameter Selection Windowが開きます。リストからSelectを選び、OKをクリックします。パラメータとしてSelectがセットされます。


Test Functionをparam==testValueに、Test Valueを1.0に設定します。


これで、「Anim graphのSelectパラメータを1.0にセットすると、このTransitionが有効になる」という状態になりました。


EntryNode0とMotion2を結ぶTransitionにも、全く同じ手順でConditionを設定します。
ただしこちらはTest Valueを2.0に設定します。


EntryNode0とMotion3を結ぶTransitionにも、全く同じ手順でConditionを設定します。
ただしこちらはTest Valueを3.0に設定します。


EntryNode0とMotion4を結ぶTransitionにも、全く同じ手順でConditionを設定します。
ただしこちらはTest Valueを4.0に設定します。


これで、「Anim graphのSelectパラメータに設定した数値を1~4に変えると、それに応じて有効なTransitionが変わり、再生されるモーションが変わる」という状態になりました。

次に、各MotionノードからExitNode0に向かう残り四つのTransitionにも全く同じ手順でConditionを設定します。
ただしこれらは全てTest Valueを0.0に設定します。







これで、「Anim graphのSelectパラメータに0.0を設定すると、ExitNodeに向かう全てのTransitionがオンになり、ニュートラルに戻る」という状態になりました。
(実際はここのTransitionが無くてもニュートラルに戻るみたいですが、良くわからないので一応設定しておきました。)

以上でConditionの設定は終わりです。
テストしてみましょう。
Anim GraphでMotion0ノードをクリックで選択して黄色にし、Active Animgraph/Stateアイコンをクリックします。


Motion0が有効になり、ニュートラルモーションが再生されます。
次にParametersビューでSelectパラメータを1.0か2.0か3.0にし、Goパラメータを1.0にします。
Selectパラメータの値に応じたモーションが再生されます。
次にSelectパラメータを0.0にし、Goパラメータを2.0にします。
ニュートラルモーションに戻ります。

テストが終わったらAnim Graphを忘れずセーブして下さい。


以上でモーション遷移の作成は終了です。
次回からはLumberyard Editorでの作業です。

No comments: