tmytのらくがき

個人の日記レベルです

VRChatアバターのモーションを非破壊に差し替えるやつを作りました

VRChat楽しんでますか?僕はぼっちなのでBoothで衣装を買って、Unityで着せ替えを楽しんで、時々散歩に出かけるのと、ラジオ体操をするぐらいです。

2年ぶりの投稿がこれでいいのか一瞬悩まなかったわけでもないんですが、気にしたら負けな気がするので気にしないことにしました。

tl;dr

  • アバターのPlayable Layerに設定されているAnimatorに含まれるMotionを差し替えるNDMFプラグインを作ったよ
  • VCCから導入できるよ、URLはここ https://tmyt.github.io/vpm/
  • GameObjectを置いて、Avatar Motion Changer というComponentを設定してつかってね

前置き

さて、アバターのモーション*1を差し替えたいことが時たまあります。 具体的には、AFKを別なものに変えたり、ジャンプモーションを変えたり、ハンドサインに割当たっているモーションを変えたりでしょうか。

これらの変更をするにはアバターに付属しているAnimatorを複製して編集してアバターに設定という手順を踏まないといけないです*2。 ただ、Animatorを複製して編集みたいなのはできればやりたくないのでNDMFの力でPlayable LayerのAnimatorに設定されているMotionを差し替えるやつを作ってみました。

導入方法と使い方

VCCから簡単導入できるようにしてみました、手元のVCCと友人にやってもらった限りインストールできているので多分あってると思います。 次のページからAdd to VCC してVCCから、Avatar Motion Changer というのをインストールしてください。Non-Destructive Modular Framework が必要ですが、Modula Avatarがインストール済みであればすでに入っています。

tmyt.github.io

VCCからパッケージがインストールできたら、実際にアバターに組み込んでいきます。 今回は、ぽんでろさんのしなのちゃんに、フカさんのしなのちゃんの手でしょりしょりするやつを設定してみます。 アバターなどのUnity Packageはすでにインポートされている状態とします。

booth.pm

booth.pm

まずGameObjectをアバターの配下に追加し、そのGameObjectにAvatar Motion Changerというコンポーネントを追加します。*3

List is Empty と出ている近くの+ボタンを2回押します。すると項目が2個増えるので、ドロップダウンからいい感じに設定します。Animationのところは、設定したいMotion、ここではFUKA_Fist_Triggerをドロップします。

あとはプレイボタンを押すとか、アバターをアップロードするときなどのビルド時に自動でモーションが差し変わります。 もとのAnimatorも変更されないのでアバターのプレハブが更新されたときも基本的に気にしなくていいはず…です。

制約事項

  • Playable Layerに対するAnimatorが未設定の状態のものはこのコンポーネントから設定することはできません。将来的にできるようになるかもしれないですが、そもそも使うことがなさそうなので対応は未定です。
  • StateのMotion以外のパラメータの設定には現時点では対応していません。どうしても必要になったら対応するかもしれないですがこちらも使わなさそうなので対応は未定です。

その他

  • ひとつのGameObjectに複数つけても正しく動くように作っているはずですがテストしてないので本当に動くかはわかりません。
  • オリジナルのデータが変更されていないこと・Play時の一時ファイルでのみ変更されていること・アップロードしたアバターでは変更が反映されていることは十分に確認していますが、100%オリジナルデータが安全という保障はできないので各自バックアップは撮ってください。

おわりに

モーション入れ替えがとても簡単になるのでみんな使ってみてね!*4

それと、こういうの設定できたよ!これが設定うまくできないよ!みたいなのがあったらこそっと教えてください

*1:ここで指すモーションは、Playable Layerに設定されているAnimatorのStateMachine内に設定されているAnimation Clipを指します

*2:たぶんそう。本当にそうなのかはわからないけどみんなAnimator編集するって書いてるからたぶんそう

*3:アバター配下のどこかにComponentが設定されていれば動くので追加しなくても大丈夫ですが、後から見た時にわかりやすいのでとりあえず追加します

*4:そもそもこれを使うシーンが多分ほとんどない