Avatars3.0でログアウトエモートを導入する(わかってる人向け)

VRChatの仕様が気まぐれすぎました。
Avatars3.0で導入する場合、手間が増えます。一方で、事実上いくらでもエモートを導入できるメリットもあります。

ログアウトエモート Vol.01 - 若狭工房 - BOOTH
ログアウトの際にそのままぱっと消えるのは味気ないと思い作成しました。 プレハブひとつとアニメーションのみで構成されているので、 どなたでも簡単に導入できると思います。 ---------------------------------------------------- 【使用方法】 unitypackage形式にな...

たとえば、上記の製品に同梱されている3つのログアウトエモートを1体のアバターに入れ、気分によって使い分けることができます。

分かってる人向け、と書いたのは細かいところまで書いていると日が暮れるからです。
ログアウトエモートの導入で詰まった部分に絞って解説します。

スポンサーリンク

Playable Layersについて

Avatars3.0では、アニメーションを起動させるために複数のPlayable Layersを用います。
大きく5つあり、Base, Additive, Gesture, Action, FXがあります。

Playable Layers
In the Avatars 3.0 Avatar Descriptor, there are five buttons labeled: BaseAdditiveGestureActionFX These are Playable Layers. Each of them takes a Unity Animato...

ログアウトエモートを使うには、このうち1~2個を用います。2つを用いるには理由があります。

困ったちゃんなPlayable Layers

Playable Layersの仕様上の制限により、ログアウトエモートを1つのレイヤーに入れ込むことができません。

全身のボーンを動かすにはActionレイヤーに入れる必要がありますが、こちらではパーティクルやオブジェクトの表示・非表示を制御できません。
パーティクルやオブジェクトの制御を行うにはFXレイヤーを使用する必要がありますが、こちらでは逆に全身のボーンを制御できません。

従って、上記の2つの要求を同時に満たすにはステートマシンをコピーして2つのレイヤーで同時に動かし、あたかも合成されているかのように見せる必要があります。

方法

全身のボーンの制御だけで済むのであれば、Actionレイヤーに入れ込むだけで終了です。

次のような制御を行います。

ActionレイヤーはデフォルトでレイヤーそのもののWeightが0に設定されているため、明示的にWeightを1に設定しなければボーンの動きが適用されません。
VRC Playable Layer Controlによって、レイヤーのWeightを1に変更します。

また、アニメーションによる制御を優先するためにトラッキングの制御が必要です。
VRC Animator Tracking Controlにより、制御を行います。
Eyes & EyelidsとMouth & Jaw以外をAnimationに変更します。

ログアウトエモートから抜ける時は、逆の操作を行います。
レイヤーのWeightを0に設定し、先ほどAnimationに設定したトラッキングをTrackingに戻します。

ログアウトエモートでは、2つの条件を設定することをおすすめします。
1つは上の写真のような条件で、Exit Timeを1に設定することでアニメーションの再生が終了することをトリガーに次の条件に進むようにできます。

一方で、このままの設定ではアニメーションが再生終了するまで次のステートに進めなくなります。
Expression MenuでToggleに設定した場合にOffにすると値が0になることを利用して、次のステートに進めるなどの対応を行ってください。
たとえば、Conditionsにそのアニメーションを起動するために使用した変数が0になったとき、アニメーションを終了するような定義を行います。こうすることで、ログアウトエモートを再生した後にキャンセルができるようになります。

Build 1039にて、デフォルトですべてのパラメータが保存されるようになりました。
それに従って、ログアウトエモートを再生して別のワールドに移動すると移動直後に再びログアウトエモートが再生されます。
ログアウトエモートの時間だけ待つか、Reset Avatarを行うことで当座の解決は可能です。

パーティクルなどがある場合

全身のボーンの制御にとどまらず、何かエフェクトを出したいような場合は同時にFXレイヤーでも制御を行う必要があります。
そのようなログアウトエモートの場合は、先ほど作成したステートマシンを丸ごとコピーし、FXレイヤーに貼り付けてください。
起動するアニメーションや条件は一致させてください。

貼り付けた後、VRC Playable Layer ControlとVRC Animator Tracking Controlは削除できます。
残したままにしておくと予期しない結果を招く可能性があります。

保守性下がるのであまりコピペはしたくないのですが、VRChatがそういう仕様なので仕方ありません。

ActionレイヤーとFXレイヤーにステートマシンを組み込むことで同時にアニメーションを再生し、疑似的にそれっぽく見せることができるようになります。
ログアウトエモート程度であれば問題ないかもしれませんが、異なるレイヤーのアニメーションを同時に再生するという荒業で解決しているので今後のメテオフォールでアバターが壊れる、また運用中に同期が正常に行われなくなる可能性がある点に注意してください。

無事に実装できると次のような動作がAvatars3.0で実行可能になります。

元々2.0用に設計されたものを無理やり3.0に持ち込んでいるので、よく分からない人は2.0を使ったほうがいいと思います。

2022年5月現在、SDK2は非推奨になっています。
工夫してSDK3に移行したほうがいいと思います。

タイトルとURLをコピーしました