VRChat上でマイクミュートのON/OFFに連動させてアクセサリーの表示を切り替える

■やるとどうなる

ミュート中のみアクセサリーを表示することで、周りの人たちにマイクオフであることを視覚的に伝えられる。(お母さんが来た、何かを口に含んでいる、等々)
ミュートのまま喋っていることに自ら気づける可能性がちょっぴり上がる。

■とりあえずやってみたい人向け手順

細かいことはどうでもいいのでとにかく今すぐやりたい人向け
参考画像のUnityは英語表記を使用
日本語化した場合もボタン類は同じ位置

1.ミュートに連動して表示させたいアクセサリを装着

そもそもミュート中に表示/非表示を切り替えたい物が無ければ始まらない

いい感じの位置に装備
普段の改変と同様にボーンの中にアクセサリを入れ込むところまで行う
手動でも各種ツールでも好きな手順で装着してOK


2.FXレイヤーを開く

FXレイヤーはハンドサインと表情の変化を紐づけたり、アバターによっては服の着せ替え等々を設定しているすごいやつ

アバター本体を選択し、画面右側のInspectorに表示されている項目からPlayable Layersを探す
アバター製作者によって項目の位置が違うので見つかるまで下にスクロール
FXの項目に設定されているファイル名を選択
画面下部のPlojectで設定されているファイルが強調表示されるので選択
操作に自信が無い人は1回Ctrlキー+Dキー押下してバックアップを取得


3.MuteSelfパラメータを追加

ユーザーのミュートON/OFFが切り替わった情報を受け取る為の目印をFXレイヤー内に作る

Animatorタブを選択
Animatorタブ内のParameterタブを選択
Parameterタブ内の+マークを選択
追加するパラメータの種類を求められるので、"Bool"を選択
最下部に追加されたパラメータ名をダブルクリックし、パラメータ名を"MuteSelf"に変更
※パラメータ名は必ず"MuteSelf"に変更


4.ミュート連動用のレイヤーを作成

どういう条件の時にミュート中アクセサリの表示/非表示を切り替えるかを設定する

Layersタブを選択
Layersタブ内の+マークを選択
最下部にNew Layerが作成されている
判別がつくようにレイヤー名を"MUTE MARK"に変更
自分で判別できる名前なら"OsiriPuriPuri"等好きな名前でOK
レイヤー内で右クリックし、"Create State"、"Empty"の順で選択までを2回行う
作成された長方形を選択し、画面右側のInspecterで内容を確認
1つ目の橙色の長方形は名称を"DISABLE"に、2つ目の灰色の長方形は名称を"ENABLE"に変更
ついでにWrite Defaultのチェックを外しておく
DISABLEを右クリックし、Make Transitionを選択
その後ENABLEを選択すると矢印で長方形が繋がる
同様の操作をENABLEからDISABLEに対して行い、両方向の矢印で繋ぐ
DISABLEからENABLEの方向に向いている矢印を選択
Has ExitTimeのチェックを外す
"+"を選択
Conditionsに項目が1行追加されるので、左側の"IsLocal"を選択し"MuteSelf"に変更
先ほど問題なく"MuteSelf"パラメータを作成出来ていれば候補に表示される
ENABLEからDISABLEに向かっている矢印も同様に設定
但し、設定した"MuteSelf"パラメータの右側はFalseを設定する
必ず双方向で異なる設定がされていること


5.アニメーションの作成

残すはアクセサリ表示/非表示のアニメーションを作るのみのウィニングラン

画面下部のフォルダ内で右クリックし、"Create"→"Animation"の順で選択
作成された"New Animation"の名称を"MuteMark_Disable"に修正
DISABLEの長方形を選択し、Inspector上に表示されているMotionの欄に
"MuteMark_Disable"を設定
アバターを選択し、Controllerに改変中のFXレイヤーを設定する
バックアップを取っている場合、改変していないバックアップ側のファイルを設定しないよう注意
今は"MuteMark_Disable"のアニメーションを編集しているので
Isactiveのチェックを外してアクセサリを表示しない状態を作成
アニメーションファイルを新規作成すると1:00時点にキーフレーム(●)が設定されている為、
●を選択してDeleteキーで削除
アクセサリを表示しない状態のアニメーションの作成が完了
ミュート時にアクセサリを表示するアニメーションは複製から作成
MuteMark_Enableに名前を変更し、MuteMark_Disableと逆の状態を設定
MuteMark_EnableをFXレイヤーに設定して改変完了
アニメーション作成用に設定したFXレイヤーを削除
事後確認も忘れず

■補足

MuteSelfって何

怪しい翻訳

VRchat側が全プレイヤーに最初から用意しているパラメータ。
現在ユーザーがミュートであるか否かの情報が入っているので、そのパラメータを使いたい目印を立てておくと情報の更新があった時に教えてくれる。
手順2でFXレイヤーに作成した"MuteSelf"パラメータがその目印の役目を担っている為、パラメータ名に"MuteSelf"以外を設定するとマイクのオンオフ状態を教える先がわからなくなってしまい動作しなくなる。多分。




■終わりに

記事中の可愛いアバター → "龍のヨルちゃん"

記事中でミュート連動させた素敵アクセサリ → "VRC向け 絆創膏(Band-aid) A"

記事中で使用しており、参考にさせてもらっているアニメーターコントローラー → "VRChat向けCustom Animator Controllers"

終わり。