着替えを実装している中で、サングラスと帽子は同時に出したくないなとか、水着と服は同時に出したくないなと思うことはよくあると思います。
そんな排他制御を簡単に実装できるAvatarParametersDriverについての記事があんまり見当たらなかったので紹介しようと思います。
※Modular Avatar(NDMF)を使います
導入
例えばサングラスと帽子を同時に出したくない場合、とりあえず3パターンのアニメーションを組めば実装できます。
- サングラスON + 帽子OFF
- サングラスOFF + 帽子ON
- サングラスOFF + 帽子OFF
2つくらいならそんな大変じゃないですが、これが多くなってくるとアニメーションの実装と状態の管理が非常に面倒です。
今回の場合、それぞれONOFFのトグルをやるだけのアニメーションを作って、片方のパラメーターがONになったらもう片方のパラメーターがOFFになってくれたら簡単な気がします。
このように、あるパラメーターの値がこうなったとき、別のパラメーターの値も変更する、みたいなことが色々できるVRC Avatar Parameter DriverというのがSDKには用意されています。
ただ、実装が結構面倒で…。
それを簡単に扱えるようにしてくれたのがAvatarParametersDriverです。
VCCからインストールして使ってみましょう!
使ってみよう
ここにヘッドドレスとバイザーが同時に出てほしくなさそうなマヌカちゃんがいます。

まずはAvatarParametersDriverと同じ作者のAvatarMenuCreater for Modular Avatarを使ってサクッとトグルを実装します。
使い方わかるぜって方は⚠️のとこだけ見てください。
トグルを実装
Create Emptyで衣装配下に空のGameObjectを作って、それぞれトグルだとわかるように名前をつけます。
(これがExpression Menu名になります)

Add ComponentからAvatar Toggle Menu Creatorを追加し、

MA Menu Installerも追加します。

オブジェクトを追加にオンオフしたいものを追加(今回はバイザー)し、
- バイザーをつけてる状態を初期状態としたいので
パラメーター初期値はオン パラメーター保存はお好きに- チェックを入れるとアバターを変更してもオンオフ状態などパラメーターが保存されます
- ⚠️
パラメーター名はアバター内で使用していないものを入力 - ⚠️
パラメーター自動リネームは今回はオフに- パラメーター名を指定するときは通常チェックをいれたほうがよいです。チェックを入れるとパラメーター名がかぶっていても問題なくなります。今回はリネームされると都合が悪いのでオフです。
ON=表示にチェック- Expression Menuをオンにしたときに表示されます。

ヘッドドレスについても同じように設定し、これでトグルの実装は終わりです。

バイザーを初期表示オン、ヘッドドレスはオフにしたのでそれに合わせてオブジェクトの表示状態も正しくしておきます。

AvatarParametersDriverを実装
パラメーターの状態によって別のパラメーターを変更するやつを実装します。
同じようにCreate Emptyで衣装配下に空のGameObjectを作ります。

Add ComponentからAvatar Parameters Driverを追加します。

今回はバイザーがオンだったらヘッドドレスをオフにする、と、ヘッドドレスがオンだったらバイザーをオフにする、の2つを作る必要があります。
右下の+を2回クリックし、2つ追加します。

自分もよくわからないので詳しくは説明しませんが、Local Onlyにチェックを入れると、自分が変更したときだけに発生するようになります。ワールドや他人によるパラメーター変更の影響を受けないということですね(間違ってたら指摘お願いします)。
基本的には自分が変更したときだけ動いてほしいと思うのでチェックを入れておくと事故が少ないと思います。
Conditionsに条件を、Drive Parameterに変更したいパラメーターをいれます。
今回だと、VisorがTrueのときHeaddressはFalseに、HeaddressがTrueのときVisorはFalseになってほしいので、以下のように設定します。

Setのところを変えると他にも色々使えそうですね。
完成
うまく組めてるとこのようにオンオフするだけでもう片方も変わるようになってると思います。

排他制御も便利ですが、既存のMA対応衣装でメニューとかすでに実装されてるときに連動して自分が用意したオブジェクトを差し込んだりするときとかにも便利です。
(全部組み直しはめんどくさいので…)
というわけで、AvatarParametersDriverの紹介でした。
Modular Avatarなど他でも利用可能
AvatarParametersDriverはあるパラメーターの値がこうなったとき、別のパラメーターの値も変更する、というものなのでModular AvatarのMA Object Toggleなどその他のものでも問題なく利用可能です。
パラメーター名の自動リネームが走らないように気をつけるだけですね。
【宣伝】
最近ワールド販売も開始しました~~!よかったら見てみてください。
kxn4t.hatenablog.com