-
まずEmoteSwitchとは
凝ったアバター自作勢の皆様おなじみの『Emoteのアニメーションの上書きを利用してオブジェクトの出し入れなどの切り替えを行う仕組み』です。
導入など詳しくはケーキさんの記事が解りやすいかと思います。
-
EmoteSwitchの動作確認ってどうしてる?
VRChat上で確認するには何分か掛けてアバターをアップロードし、VRCに戻ってアバターをリロードし、Emote再生して確認。と言う流れになろうかと思います。
めんどくさくないですか?
特に切り替えにエフェクトとか演出が絡んでタイミングのトライ・アンド・エラーが要るとなると超めんどくさい。
なのでエディター上で簡易的に切り替えを再現する仕組みを組みました。
-
Unityエディター上でエモートスイッチを再現する
とりあえずEmoteSwitchに必要な構造や.animの作成は元怒さんが配布されている【EmoteSwitch V3】等で一通り出来てるものとします。
今回はテストに右手の刀のオン・オフで生成しました。
①擬似的にEmoteを動かすためのAnimatorControllerを作成
名前は何でも良いです。とりあえず『__EmoteSwichTEST』にしました。
②Idle(なにもしてない状態)モーション・生成されたEmoteSwitchのOn・Offモーションの.animをD&D等で登録する。
Idleは自前で用意したものが無ければ、VRCSDKにあるものでも大丈夫です。idleで検索掛けたらあるはず。
③AnimatorのParameterタブで遷移条件を追加する
+ボタンからTriggerを2つ選び、わかりやすいようにonとoffにリネームします。
④IdleからOnOffへのトランジションを繋げ、遷移条件を設定する
ステートを右クリック>MakeTransitionで矢印が伸びるので、Idleからon・offへ遷移し、またIdleへ戻るトランジションを繋げます。
・Idle→onのトランジションの設定はこんな感じ
・HasExitTimeを外す。遷移条件を満たしたら即遷移するようになります。
・Conditionsの+を押して先程定義したTriggerのonを遷移条件に設定。
・on→Idleのトランジションはこんな感じ
・VRC上ではモーションが一通り再生し終わるまで動けないのでHasExitTimeはそのまま。モーションが再生し終わったらIdleに戻る設定。
・Off側もConditionsにoffを設定する以外は同様。
⑤設定したAnimatorControllerをアバターのAnimatorにセット
以上で完了です。
-
Unityエディター上で動作確認
あとはUnityのPlayを押してゲーム(?)を動かし、Animatorビューから③で設定したTriggerの丸を押せばステートが遷移しVRCでEmoteを選択したときの挙動を再現できます。
この通りステートの切り替わりで手元の刀のOnOffが切り替わってます。
最終的な確認はちゃんとVRC上で行う必要がありますが、ちゃんと動く構造になってるか、エフェクトのタイミングはどうかの微調整には使えると思うのでUnityとVRCの行ったり来たりをいくらか軽減できるのではないでしょうか。