【VRChat】ModularAvatar非対応ギミックをMA対応させる方法・基礎編【マウス操作のみ】

最近、基本的にアバターへのギミック導入はModularAvatar(以下MA)で行っているのですが、MAが登場する以前のギミックや、導入ツールによって入れるギミックはMA非対応なので、ギミックを外したいときにメニューやアニメーションコントローラーを作り直す必要があるのが非常に面倒……
ということで非対応ギミックをMA対応させてprefab化し、不要な際はprefabごと削除するだけにする方法を紹介します。

※今回は以下の2コンポーネントのみ利用します
MA Bone Proxy
MA Merge Animator

MA Menu Installerも書きたかったのですが今回お借りしたギミックにMenuがなかったので割愛しました……
そのうちギミック付きの服からギミックを分ける作業について書こうと思うので、その際にMA Menu Installerについても描こうと思います

0.MA対応できないギミック、メリデメ

今回のMA対応ですが、特別な技能(C#など)を必要とせずにマウス操作だけで行うことを目的としています。
そのため一部のギミックはこのノートの方法ではMA対応できません

MA対応できないギミック

例として挙げますが以下のような特徴を持つギミックはMA対応できません
・アバターの階層構造を変更するもの
・アバターに元から存在するオブジェクトの名前を変更する必要があるもの
・アバターに元から存在するオブジェクトにコンポーネントを加えるもの
※このノートの方法では、というだけで必ずしもMA対応ができないというわけではないです

MA化するメリット

・アバターのメニューやパラメーター、アニメーションコントローラに直接変更を加えないので、ギミックの取り外しが楽
・他のアバターへの転用するのが楽

MA化するデメリット

・アバターが使用している総パラメーター数の確認が難しくなる

2.MA対応作業

では、さっそくMA対応を進めていきたいと思います。

今回お借りするギミックは
Licoのバーチャル雑貨店様の白い吐息パーティクルです

ギミックの中身を確認する

まずはインポートした中身を確認しましょう

マテリアルをまとめたフォルダとアニメーションコントローラが1つ、アニメーションが3つ、あとはprefabというシンプルな構成ですね。
(今回はアニメーションオーバーライド用の『White Breath Ver.3.00 Animation Override』は使いません)

通常の導入方法を確認する

次にboothの商品ページに書かれている導入方法を確認しましょう
今回は話している際に吐息が出るようにするための『白い吐息パーティクルをLip Syncを使って出す手順』を参考にします

ざっくりと要約すると以下のようです

①インポートしたフォルダ内の『White_Breath_Particle Ver.3.00.prefab』をアバタールート直下に配置する
②①で配置したprefabをunprefabする
③White_Breath_Particle Ver.3.00直下の『A. [set in _Head_ and Position XYZ to 0] (Constraint Settings Sources) White_Breath_Particle Ver.3.00』をアバターのheadボーン直下に入れる
④『B. [Change "Position" to mouth] White_Breath_Particle root』を口元に移動させる
⑤付属アニメーションコントローラーの内容をアバターのFXレイヤーにコピーする

MA対応ギミックの置くだけと比較すると手順が多いですね。
このうち②③⑤の手順を省略できるようにしたいと思います。

①付属のprefabをアバタールートに配置する

まずは付属のprefabを導入方法の指示通りアバタールート直下に入れます。

また、今回はLipSyncに反応して吐息が出るようにするだけなので、C1から始まるオブジェクトはEditorOnlyにして無効化してしまいましょう

②①で配置したprefabをunprefabする

こちらはMA対応するなら不要な作業となるのでスルーします

③MA Bone Proxyコンポーネントで③の手順を省略する

導入方法にてheadボーン直下に『A. [set in _Head_ and Position XYZ to 0] (Constraint Settings Sources) White_Breath_Particle Ver.3.00』を入れるように、という手順になっていますが、これのためにはprefabを解除したり、移動をさせたりと手間がかかるのでMA Bone Proxyコンポーネントを使って解決します

『A. [set in _Head_ and Position XYZ to 0] (Constraint Settings Sources) White_Breath_Particle Ver.3.00』のInspectorウィンドウのAddCompornentからMA Bone Proxyを追加します

追加されたMA Bone Proxyの詳細設定を開きます

Bone referenceをHeadに設定し、配置モードを『子として・ルートに配置』に設定します

これで完了です。
MA Bone ProxyはUnity再生時・アップロード時にこのコンポーネントが付いた対象をターゲットの下に移動させる機能です
ギミックのMA対応時以外にも、アクセサリを付ける際など活用できる場面は多いので覚えておくと◎です

④『B. [Change "Position" to mouth] White_Breath_Particle root』を口元に移動させる

こちらの作業はアバターによって口の位置が異なる際の微調整で省略できないので普通に調整します

⑤の内容をMA Merge Animatorを使って省略する

Unityの再生時、およびアップロード時に設定されたアニメーションコントローラーの内容をアバターのFXレイヤーに統合してくれるMA Merge Animatorコンポーネントの設定をします
長くはなりますが、慣れれば難しいものではないので頑張って覚えてください

①でアバタールート直下に配置したWhite_Breath_Particle Ver.3.00に対して、付属のアニメーションコントローラーをアタッチします
こうすることで、White_Breath_Particle Ver.3.00にAnimatorコンポーネントが追加され、Animationウィンドウでアニメーションコントローラーに設置されているアニメーションの中身が確認しやすくなります

では、再度White_Breath_Particle Ver.3.00をクリックしてAnimationウィンドウ(画面右上)からアニメーションをチェックしてみましょう

文字が黄色く表示されてしまっていますね。
これはアニメーションで動かす対象が見つからない(Missing)ということを示しています。当然これでは動きません
このとき、黄色く表示されている部分をクリックしてF2キーを押すことで、アニメーションで動かそうとしている対象のパス(階層内での位置情報)の確認・編集ができます
今回のパスは以下の通りでした
(分かりやすいように階層ごとに改行とインデントを入れています)

White_Breath_Particle Ver.3.00/
    stick to Head (with Parent Constraint)/
      B. [Change "Position" to mouth] White_Breath_Particle root/
        D1. (for Lip Sync) invisibe particle

実際のprefabの構成と見比べてみましょう。

今回動かそうとしているAnimationの内容はD1から始まるオブジェクトのオンオフなので、一見正しいように見えますね
ではなぜMissingになってしまうかというと、Animatorコンポーネントが設定されている階層はパスに含める必要がないからです

White_Breath_Particle Ver.3.00/ ←これが要らない
    stick to Head (with Parent Constraint)/
      B. [Change "Position" to mouth] White_Breath_Particle root/
        D1. (for Lip Sync) invisibe particle

対処法としては以下の2通りあります
・animationファイルの該当の部分を削除する
・1つ上の階層にanimatorを設定する

今回はマウス操作のみで対応することが条件なので2つ目の『1つ上の階層にanimatorを設定する』ことで対応しようと思います

アバタールートを右クリックしてCreateEmpty(空のGameObjectの作成)をし、『Toiki』という名前にします

White_Breath_Particle Ver.3.00のInspectorウィンドウで設定されているAnimatorコンポーネントを削除します

先ほど作成したToikiの中にWhite_Breath_Particle Ver.3.00を移動し、改めてToikiに付属のアニメーションコントローラーをアタッチします

これでアニメーションファイルに設定されているパスと実際の階層構造が一致したのでMissingが解消されましたね。
ToikiのInspectorウィンドウのAddCompornentからMA Merge Animatorを追加しましょう

あとは画像の通りに設定すれば完了です

おまけMA Parametersを設定する

今回のギミックは既存のパラメーターを利用したギミックであるため、設定は不要なのですが、MA Merge Animatorで統合するアニメーションコントローラーに独自のパラメーターが設定されている場合、MA Parametersの設定が必要になります
以下は参考画像です

GestureManagerで挙動の確認

設定が終わったらGestureManagerから挙動の確認をしましょう
今回の吐息ギミックはエクスプレッションメニューからオンオフするギミックではないので、事前にアニメーションコントローラーから遷移条件を確認しましょう

このギミックではViseme(口の形)パラメーターが0以外の時に吐息が出るような仕組みになっているようですね。
この場合GestureManagerで確認する際はdebugタブから該当のパラメーターを変更しましょう

Visemeの値を0→1ちょっと確認しにくいですがうっすらと吐息が出ていることが確認できましたね
あとは今回作成した『Toiki』以下をProject内にドラッグアンドドロップしてPrefab化すればMA対応は完了です
お疲れ様でした。

この記事が気に入ったらサポートをしてみませんか?