【VRChat】MAでExpressions Menuを作る方法【Modular Avatar】

VRChat
スポンサーリンク

はじめに

今回はModular Avatar(MA)でExpressions Menuを作る方法を紹介します。

UnityやModula avatarの導入済み。
何かしらのアバターを1つはアップロードしたことを前提に進めます。
↓前提知識はこちらをご覧ください。

またMAを使わない方法はこちらで解説。

アバターの既存メニューに差し込む(MA Menu Installer)

アバターには多くの場合で何かしらの「Menu」が入ってます。
↓こちらはMAを使用してないメニューの例。

プロジェクトにメニューやパラメータが無い場合はModula Avatarを使ってる可能性があります。
この場合、Acatar Descriptorの表示は「なし」になります。
この状態でも正しく動きます。

この既存Exp Menuに新しく要素を追加する処理を作ります。

ヒエラルキーにアバターを入れます。

「▶」で中の階層を開きます。
右クリック → 空のオプジェクトを “階層内” に作成。

空のオプジェクトの名前を「Exp Menu」などに変更。

同じ手順でExp Menu内に空のオプジェクトを作成。
名前を「中身」などに設定。

そして「中身」を選択。

インスペクター → コンポーネントを追加を選択。
「MA Menu Installer」を追加。

これで既存のExp Menuに新しい要素を追加できます。

あとはVRChat上でExp Menuの動作を確認できる「Gesture Manager」というツールがあります。

こちらを導入して動作を確認。

どうしても「Gesture Manager」を入れたくない方はVRChatにアップロードでも大丈夫です。
ただ1回1回アップロードするのは手間なのでGesture Managerの導入をおすすめします。

すると… 今は “干渉する” という処理が入っただけです。
干渉して “何を作る” かという処理が入ってないのでエラーが出ます。

なので次はメニューの「項目」を追加していきます。

以上がアバターの既存メニューに差し込むの解説です。

メニューに項目を追加する(MA Menu Item)

MA Menu Installerを入れたところに「MA Menu Item」を追加します。
これがメニューの項目追加処理です。

MA Menu Itemの表名前はオプジェクト名と自動一致します。
好きな方で編集します。

Ma Menu Installerの「メニュー内容を表示」を押すと中身が確認できます。
MA Menu Itemで追加した「中身」が入ってます。

この状態で「Gesture Manager」を実行。
すると中身が追加されたことが分かります。

メニュー項目を大量に作った時の挙動

同じ処理を使えばメニューに大量の項目を追加できます。
ただしVRChatの仕様上「表示可能な項目数は最大8個」です

そのため8個以上のメニュー項目を追加すると…

「More」という項目が自動生成されます。
そして8個目以降がMoreの中に格納されます。

Moreようなメニューを入れ子にする項目を「サブメニュー」と言います。

さらに増やししてMore内に8個以上の項目を入れようとします。
すると8個超えたら8個目が「More」になり無限に入れ子になる構造になります。

ちなみにこの「Sub Menu」は自らの手で設定して作れます。

見た目や構造の分かりやすさ的になるべくSub Menuを自分で作ってまとめるのがおすすめ。

アバター利用者の方は項目が増えたら自力でまとめたりして対処。

アバターやギミック製作者の方は機能拡張を考えて…
トップに追加される項目をなるべく少なくします。

トップにサブメニューを1つだけ追加。
そのなかでアバターやギミックを動かす回路を組むのがおすすめ。

メニュー項目にアイコンを追加する

アイコンの追加はMA Menu Itemの画像を入れると設定できます。

アイコンは適当なデザインツールで作ります。
大きさは「256×256px」や「128×128px」あたりで作成。
透過画像を格納できる「.png形式」で出力。

Unityのプロジェクトに読み込み。
選択。

ここではインスペクターを下図のように設定。
(用途に合わせて変えて大丈夫です)

この情報をアイコンに差し込み。
これで項目に画像(アイコン)を追加できます。

画像の削除はMA上で選択 → Deleteキーで行えます。

以上がメニュー項目にアイコンを追加する方法です。

6つのメニュー項目タイプ

MA Menu Itemは6つのタイプを選べます。
これがExp Menuの中身のバリエーションです。

・ボタン → 押してる時だけ信号が行く
・トグル → 押したら信号のオンオフが切り替わる(要するにスイッチ)
・Sub Menu → メニューを入れ子にする
・Tow Axis Puppet → ジョイステックを上下左右と動かし操作する
・Four Axis Puppet → ジョイステックを上下左右と動かし操作する
・Radial Puppet → 円形のメニューで0~100%と動かし処理を変える

ここではよく使う順番に紹介します。

① → Sub Menu
② → ボタン・トグル
③ → Radial
④ → 2/4Axis

この順番で見ていきます。

【タイプ】サブメニューについて

MA Menu Installerを追加したところにあるMenu Itemを開きます。
タイプを「Sub Menu」に設定。

するとSub Menu内に「項目」が無いのでエラーが起こります。
↓このように押しても開けない状態になります。

そこでヒエラルキーで「中身」を選択。
Ctrl+Dキーで複製して「中身」の中に「中身(1)」入れます。

中身(1)のコンポーネントにあるMA Menu Installerを削除します。
3つの点 → コンポーネントを削除を実行。

そしてMA Menu Itemのタイプを「トグル」あたりにします。

Sub Menu意外であればなんでも良いです。

この状態でGesture Managerを実行。
するとサブメニュー内にトグルの項目が生成されます。

Sub Menuを作った「中身」の階層を選択。
すると「中身(1)」の情報が入ってることが確認できます。

このSub Menuに入れた項目は8個超えると「More」が生成されて格納されます。

ちなみにSub Menu内のサブメニューアセットを「Expressions Menu アセット指定」にすると既存メニューを読み込むことができます。

これを有効化すると「中身(1)」のようなSub Menuの中に入れたものが無効になります。
分かりにくいので個人的に使わない方が良いと思ってます。

これを使うよりは既存MenuとParameterをMA移植する方が良いと思います。
↓操作方法はこちらで解説。

【VRChat】MAに既存MenuとParameterを移植する方法【Modular Avatar】
Menuの移植はMA Menu Installerの「プレハブ開発者向け設定」で行えます。Sub Menuの移植はMA Menu Itemの「オプジェクトに展開」で行い、パラメーターはMA Parametersの「アセットからインポート」で行います。

サブメニューのパラメーター送信機能を使う

Sub Menuはパラメーター名を設定できます。
これを設定するとSub Menu内に入ってる時に常にTureになる信号を作れます。

Ture / Falseなのでデータ型はBoolです。

VRChatにアップロード。
デバック表示を使いパラメーターを確認。

するとSub Menu内に入ってる時にON(Ture)になってることが分かります。

Sub Menuに入った状態で円形メニューを閉じると「Ture」が維持されます。

Unityに戻りMa Menu Itemのパラメータ値を確認。
自動が有効化の場合は出力が「Ture/False」になります。(Bool型)

自動を解除し数字の「1」が入っているとTrue/False信号になります。

Ture / Falseのデータ型は内部的には0と1の処理で行われてます。
なので1を送信すると自動でTure/Falseのデータ型と判定されます。

自動が無効化された場合は送られた値によって自動でデータ型が判定されます。
「-0.114514」を入れた場合はFloat(少数)判定になります。
そして小数点3ケタ以下は認識されないので「-0.11」の信号になります。

自動が無効化された場合は送られた値によって自動でデータ型が判定されます。
「-0.114514」を入れた場合はFloat(少数)判定になります。
そして小数点3ケタ以下は認識されないので「-0.11」の信号になります。

VRChatで扱える主なデータ型と範囲は下記の通り。

・Int → 整数(0~255の範囲)
・Float → 少数(-1.0~1.0)
・Bool → スイッチ(1か0を、Ture/Falseで表現)

なので-114.514のような値にすると正しく送れません。
パラメーター値を手入力する際は範囲を合わせて値を決めてください。

以上がSub Menuの解説です。

【タイプ】ボタン/トグルについて

次は「ボタン」と「トグル」を見ていきます。
中身にある空白のオプジェクトをCtrl+Dキーで複製。
ボタンとトグルという名前に変更。

タイプを「ボタン」と「トグル」に変更。
パラメータ名に何か入れないと動かないので「A」あたりの適当な名前を設定します。

「Gesture Manager」で動作確認。
するとボタンは押してる時だけTureが送信されます。
クリックを押した時だけ動作するのがポイント。

トグルは押したらTure/Falseが切り替わります。
クリックを放しても動作の切り替わりが継続するのがポイント。

ちなみに「MA Object Toggle」を使うとパラメーター名を設定しなくても動きます。
これはオプジェクトのオンオフなどに使う機能です。

何かしらの「処理」が内とGesture Manager上で動かないという仕組みのようです。

MA Object Toggleを使ったモデルの「表示/非表示」切り替えギミックの作り方はこちらで解説。

【VRChat】MAでモデルの表示/非表示ギミックの作り方【Modular Avatar】
MA Object Toggleを使うとBool信号が着たらオプジェクトの挙動を操作できます。ボタンとトグルでMA Object Toggle利用する時はパラメーター名登録が不要。 ラジアルはパラメーター名を設定すると選択したら使える。

以上がタイプ:ボタン/トグルの解説です。

【タイプ】ラジアルについて

次はラジアルを見ていきます。
中身の中に空白のオプジェクト → タイプ「Radial Puppet」を作成。
これで円形メニューの作成ができます。

このRadial Puppetの情報は「ラジアルメニュー用パラメーター名」で取得できます。
ここに「Radial」などの名前を入力。

パラメーター名の方は基本的に空白にしてください。
0~100%の情報を得れるのは「ラジアルメニュー用のパラメーター」です。

そして、このパラメーターを使えるようにするために「Exp Menu」を選択。
MA Parametersを追加して “同じ名前” のパラメーターを登録。
データ型をFloatに設定。

これでラジアルメニュー名とパラメータ名が一致し連動。
0~100%の表示に合わせて「0.00~1.00」のパラメーターを操作できます。

MA Parametersところで初期値を設定できます。
0.19で19%の値になります。
ただし「アニメーターでの初期値を設定」が入ってるとMA側の初期値設定が無効になるので注意。

「アニメーターでの初期値を設定」を有効化するとアニメーター側で設定した初期値が優先されます。

このRadialを使ったギミックの作成方法はこちらで解説。

【VRChat】MAでRadialを使ったギミックの作り方【Modular Avatar】
ラジアルは回して値を0~100%で入力できる処理です。MA Menu Itemのタイプを「Radial Puppet」にするとラジアルメニューが使えます。MA Parametersを使い0~100%の入力を0.00~1.00に加工し使います。

ラジアルのパラメーター送信機能について

ラジアルには「パラメータ名」という項目があります。
これは「パラメーター」を開いた時だけ有効になる設定です。

ただしラジアルメニュー用のパラメーターだけを設定した状態では正しく動きません。
なぜかパラメーター名で設定した方の情報だけ動きます。

ラジアルのパラメーターを使う場合はMA Parametersの所で2つともしっかり定義します。
同じ名前に設定。
パラメーター名の方は使いたい情報に合わせてデータ型も設定。
ラジアルメニュー用の方はFloatのまま利用。

これで「ラジアルの値」と「表示時に有効化されるパラメーター」の2つの情報を扱えます。

パラメータの方はデータ型を正しく扱えてないと動かなくなるので注意。

下記の値の範囲で収まるように値を調整。
設定した値に合わせてデータ型を決めてください。

・Int → 整数(0~255の範囲)
・Float → 少数(-1.0~1.0)
・Bool → スイッチ(1か0を、Ture/Falseで表現)

Sub Menuのパラメータ名と同じ挙動です。

データ型が合っていても上限範囲を超えると正しく動かなくなります。
ちゃんと範囲も意識して設定してください。

以上がラジアルについての解説です。

パラメーター名に謎の値が付く場合

MA Parametersを使うとパラメーター名に謎の文字列が付くことがあります。
↓などがその例。

これはMA Parametersの影響です。
自動リネームにチェックが入ってるとこのような表示になります。

オフにするとパラメーター名から謎の文字列が消えます。

バグ対策、安定性を考えると基本的に入れておいた方が良い設定です。

以上がパラメーター名に謎の値が付く場合の解説です。

【タイプ】Two/Four Axisについて

次はTwo/Four Axisについて見ていきます。

これは上下左右のジョイステックを使って動かす設定です。

2Axisは上下と左右で2つのパラメーターを操作。
4Axisは上下左右独立して最大4つのパラメーターを操作できます。

扱う値は下記の通り。

・2 Axis → 上下と左右で「-1.0~1.0」(Float)
・4 Axis → 上下左右で「0~1.0」(Float)

斜め位置の操作は「1.0、1.0」に “ならない” ので注意。
0.71、0.71ぐらいの値になります。

2と4 AxisもMA Parametersで設定しないと正しく動かなくなります。
2と4 Axisのパラメーターは基本「Float」で設定。

あとはパラメーター名で表示してる時に「パラメータ値」を送る信号。
縦と横パラメーター名設定で縦と横の値を取得できます。

ただ個人的に2と4Aixsのパラメーター名は使わない方が良いと思います。

2と4Axisのパラメーター名を設定すると上下操作画面から戻る際に2階層戻ってしまいます。
たぶんバグの一種とおもいますが… 結構不便です。

なのでパラメーター名は空白に設定。
これで上下操作画面から戻る際に1階層で済みます。

2025年9月ごろの挙動。
将来もしかしたら修正されてるかもしれません。

4Axisも基本は同じです。
MA Parametersで必要数パラメーターを設定。(Float)

パラメーター名で表示してる時に「パラメータ値」を送る信号。
表示名・パラメーター名で上下左右の値を取得できます。

こちらも2Axisと同様にパラメーター名を設定すると2層戻るバグがあります。
なのでパラメーター名は基本空白にします。

だいたいの事は2Axisで事足ります。
4Axisはそんなに使うメリットがないです。

しいていうなら4Axisすべてに同じパラメーターを設定。
Radialのではなくジョイステック操作で動かしたいモノを操作するぐらいと思います。
(使いやすさ、UXデザイン的な問題)

4Axisを使うメリットはほぼない

4Axisの良いところは「4つのパラメーター」を制御できることだけです。
ただジョイステックで4つのパラメーターを操作する場面が必要になることはほとんどありません。

だいたいの事は2Axis+BlendTreeで解決します。
Blend Treeをアニメーションの代わりに刺してここに2Axisのパラメーターを設定。
これだけでジョイステックで4方向に動く操作が作れます。

またMA Parametersで値を登録した時点で内部的には処理に使える値を「-1.00~1.00」範囲を消費してます。
VRChatのFloatは0.01刻みで動くようなので201通りのデータが消費されます。

2AxisはFloatが2個必要なので「402通り」使ってます。

±0.01~1.00で100×2通り。
これに0地点を合わせて201通り。

そして2Axisが使う値の範囲は-1.00~+1.00なので…
取得した情報をほぼ無駄なく使えます。

一方4AxisはFloatを4つ宣言する必要があります(804通り消費)。
そして使う値は「0.00~1.00」です。(-0.01~-1.00の100×4が無駄になる)
なので内部的な値で見ると400ほど無駄なデータが発生します。

またBlend Treeは4つのパラメータ入力に非対応です。
このような扱いやすさやデータのロス的なことを考えると…
「4 Axis」を使うメリットは考えれば考えるほど無い結論になりました。

なので私のブログでは「4 Axis」は解説してません。
2Axisを使うことを推奨してます。

実験で4Axisすべてに同じパラメーター名を設定。

するとラジアルの代わりにジョイステックで操作できるものができるかと思いましたが…
VRChat上で挙動を見たところ「左だけ動く」という何とも使えないモノになりました。

4 Axisを使うメリットが本当に分からない…。
何のために作られたんだこれ…。

(Unityに詳しい技術顧問に聞いてもメリットはない感じでした)

なので4Axisは無かったものと扱って大丈夫です。
2Axisだけ使いましょう。

2Axisを使ったギミックの作り方はこちらで解説。

【VRChat】MAでTowAxisを使ったギミックの作り方【Modular Avatar】
MA Menu Itemのタイプを「Tow Axis Puppet」にすると2Axisメニューが使えます。これはジョイステック操作で縦と横の値を取得する処理です。コントローラーのステートにBlendTreeを設定して複数アニメーションを操作。

以上がタイプ:Two/Four Axisについての解説です。

「状態の保存」と「同期」の設定方法

MA Menu Itemには「状態の保存」と「同期」の2つを設定する場所があります。

【状態の保存】
 → オンでワールド移動や再ログインしても値が保存される
 → オフだとワールド移動や再ログインしても値が初期化される

【同期】
 → オンだと切り替えギミックなどの挙動がほかの人に見える
 → オフだと切り替えギミックなどの挙動がほかの人に見えない

MA Parametersの方にも同じ設定があります。
そして「状態の保存」は両方で有効化しないと実行されません。

初期状態でItemは保存するが有効。
Parametersは保存するが無効になるので注意。

同期するも同じ挙動です。
ただこちらは両方とも初期状態でオンなので事故発生率は少なめ。

以上が状態の保存と同期の解説です。

その他の細かなネタ

初期設定にするを使うと一番最初だけ操作などが有効でなくてもパラメーターが送られます。

アバターリセットなどを実行
→ 無操作の初期状態だと無効時でもパラメーターが出力されます。

1度でもボタンなどを操作。
有効/無効を切り替えると無効時はちゃんと出力なしになります。

(どこで使うねん…)

MA Menu Itemのパラメーター名を先に設定。
そのあと「MA Parameters」に進んだ場合は未登録パラメーターを確認。
ここで登録されてないパラメーター名が表示ます。
「追加」で1発で設定できます。

MA Parameters → Me Menu Itemに進んだ場合はパラメーター横の▼をクリック。
ここからパラメーター名を引き出せます。

これらの操作を使うことでパラメーター名を間違えて設定するリスクを減らせれます。

以上がその他の細かなネタです。

まとめ

今回はModula AvatarでExpressions Menuを作る方法を紹介しました。

・MA Menu Installerを使うとアバターの既存メニューに新しい要素を差し込める
・MA Menu Itemを使うとModula avatarでExp Menuの要素を作れる
・Exp Menuは6つのタイプがある
・Exp Menuのボタンとトグル以外はMA Parametersでパラメーター設定が必要。
・Exp Menuのボタンとトグル以外はパラメーター名で操作時の状態を取得できる
・状灰の保存と同期はMA Menu ItemとMA Parametersの両方で設定しないと動かない

また他にもModula AvatarやVRChatについて解説してます。

ぜひ、こちらをご覧ください。

コメント

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