メニューでオンオフするギミックを作る
帽子をメニューで出したり消したりするギミックを、Animator から自分で組みます。オンとオフのクリップ、コントローラーとレイヤー、トランジション、パラメーター、メニュー、アバターへのつなぎ方まで、1クリックずつ順に解説します。
公開 · 対象は Unity の Built-in Render Pipeline と VRChat のアバター(Avatars 3.0)です。2026年11月時点の内容です。
こんなときに読んでください
- 帽子やメガネ、羽などの小物を、メニューから出したり消したりしたい。
- Modular Avatar の Create Toggle で済ませていたが、中で何が起きているのか知りたい。自分で組めるようになりたい。
- 自分で組んだ Animator を、アバターをこわさずにつなぎたい。
- オンオフが一拍遅れる、ワールドを移ると戻る、ほかの人には見えない。
この回は、第6回 Animator のしくみ と 第7回 アニメーションを作る を読んだ前提で進めます。レイヤー・ステート・トランジション・パラメーターの意味は、そちらで説明しています。
作るもの
アバターの頭に付けた帽子(Hierarchy の名前は Hat とします)を、Expressions Menu(VRChat で開くメニュー)の「帽子」でオンオフします。名前は例です。自分のアバターの小物の名前に読みかえてください。
作るものは、次の5つです。クリップ2つ、コントローラー1つ、パラメーター1つ、メニューの項目1つ。最後に Modular Avatar(MA)で、これらをアバターにつなぎます。
- メニューの「帽子」押すと HatOn を true にする
- パラメーター HatOnBool(true か false)
- FX のレイヤー HatOFF から ON へ移る
- クリップ Hat_ONHat の Is Active を 1 と書く
- 見た目帽子が出る
作る前に、アバターのフォルダか Unity のプロジェクトを丸ごと書き出して、元に戻せるようにしておきます。
作ったファイルは、アバターのフォルダとは別の、自分用のフォルダにまとめます。たとえば Project で Assets を右クリックして Create → Folder を選び、MyGimmicks/Hat を作ります。アバターを更新したときに、上書きされないためです。
コントローラーとレイヤーを作る
帽子のためだけの Animator Controller(コントローラー)を作ります。アバターがもともと持っている FX のコントローラーには手を入れません。FX などのレイヤーの役目は 第6回 Animator のしくみ を見てください。
- Project の
MyGimmicks/Hatを右クリックしてCreate → Animationを選び、Hat_ONという名前のクリップを作ります。同じようにHat_OFFも作ります。中身は次の節で録画します。先に作るのは、ステートに入れるためです。 - 同じフォルダを右クリックして
Create → Animator Controllerを選び、Hat_FXという名前にします(Unity のバージョンによってはCreate → Animationの中にあります)。 Hat_FXをダブルクリックします。Animator ウィンドウ(Window → Animation → Animator)が開きます。- 左上の
Layersタブを押します。Base Layerが1つあります。これは空のまま使いません。 Layersの右の+を押して、レイヤーを足します。名前をHatにします。Hatの右の歯車を押して、Weightを 1 にします。足したレイヤーは Weight が 0 で作られます。0 のままだと、このレイヤーは何も書きません。- 左上の
Parametersタブを押し、+からBoolを選びます。名前をHatOnにします。大文字と小文字まで、あとでメニューに入れる名前と同じにします。 Layersタブに戻り、Hatレイヤーを選びます。Project からHat_OFFを Animator ウィンドウの何もないところへドラッグします。Hat_OFFというステートができます。最初に置いたステートはオレンジ色になり、このレイヤーで最初に入るステートになります。- 続けて
Hat_ONもドラッグして、ステートを作ります。こちらは灰色です。 - もし
Hat_ONがオレンジ色になったら、Hat_OFFを右クリックしてSet as Layer Default Stateを選びます。
LayersParameters
Hat レイヤーの中
LayersParameters
- 歯車から Weight を 1 にします。0 のままだと、メニューを押しても何も変わりません。
- Bool のパラメーターです。チェックの欄は、いまの値(false)を表しています。
- オレンジ色のステートから始まります。はじめは帽子を消しておくので、Hat_OFF をオレンジ色にします。
オンとオフのクリップを録画する
帽子を出すクリップと、消すクリップの中身を、録画で作ります。録画のしかたは <a href="/avatar-tips/animation-clip/#record">第7回 アニメーションを作る</a> でくわしく解説しています。
- Hierarchy で
Hatを選び、Inspector のいちばん上の名前の左のチェックを外して、オフにしておきます。はじめは帽子を消しておく、という意味です(あとで決める Default と合わせます)。 - Hierarchy でアバターのいちばん上(VRC Avatar Descriptor が付いているオブジェクト)を選びます。Inspector の
AnimatorのControllerの欄に、Project からHat_FXをドラッグします。録画のあいだだけ入れます。Animation ウィンドウは、選んだアバターの Animator に入っているコントローラーのクリップしか開けないためです。 - Animation ウィンドウ(
Window → Animation → Animation)を開きます。左上のクリップの名前の欄でHat_ONを選びます。 - 赤い丸の録画ボタンを押してから、Hierarchy の
Hatを選び、Inspector の名前の左のチェックを入れます。Animation ウィンドウにHat : Is Activeの行ができ、0 フレーム目にキー(ひし形)が打たれます。録画ボタンをもう一度押して止めます。 - クリップの名前の欄で
Hat_OFFに切り替え、同じように録画します。今度はチェックを入れてから外して、Hat : Is Activeが 0(オフ)のキーを打ちます。 - 録画が終わったら、
Hatのチェックが外れている(録画の前に戻っている)かを確かめます。アバターのいちばん上のAnimatorのControllerの欄も、もとに戻します。もとが空なら、欄の右の小さな丸を押してNoneを選びます。
オフのクリップも作るのは、Write Defaults(クリップに無い値をどうするか)の設定に関係なく動くようにするためです。オフのステートに何も書かないクリップを置くと、Write Defaults が OFF のアバターでは、帽子がオンのまま残ります。オンとオフの両方で Is Active を書いておけば、どちらの設定でも動きます。
録画は、アバターのいちばん上を選んでから始めます。クリップには「アバターのいちばん上から見た Hat の場所」(パス)が書かれます。このパスは、あとで MA につなぐときに使います。
トランジションを設定する
OFF から ON へ、ON から OFF へ、矢印(トランジション)を2本引きます。ここで、切り替わる条件と、切り替わり方を決めます。
Hat_OFFを右クリックしてMake Transitionを選び、そのままHat_ONをクリックします。白い矢印ができます。- 矢印をクリックして選びます。Inspector に、トランジションの設定が出ます。
Has Exit Timeのチェックを外します。Settingsの左の三角を押して開き、Transition Durationを 0 にします。- 下の
Conditionsの+を押します。左の欄がHatOn、右の欄がtrueになっていることを確かめます。 - 同じように、
Hat_ONからHat_OFFへも矢印を引きます。Has Exit Timeを外し、Transition Durationを 0 にし、ConditionsはHatOnがfalseにします。 Hat_OFFとHat_ONのステートを1つずつ選び、Inspector のWrite Defaultsのチェックを確かめます。2つとも同じにします。MA でつなぐときは、あとで MA がアバターに合わせてくれます。
▼ Settings
Conditions
- 外すと、条件が合ったその時に切り替わります。
- 0 にすると、前のクリップと混ぜずに、すぐ次のクリップになります。
- HatOn が true になったら、この矢印を通って Hat_ON に移ります。
なぜ Has Exit Time を外し、Duration を 0 にするのか
Has Exit Time にチェックがあると、いまのクリップが決まった時間まで進むのを待ってから切り替わります。メニューを押してから、一拍遅れます。
Transition Duration は、前のクリップから次のクリップへ、何秒かけて混ぜながら移るかです。0 より大きいと、色や BlendShape はじわっと変わります。オブジェクトのオンオフには途中が無いので、混ぜる時間のどこかでパッと切り替わり、遅れて見えるだけです。
オンオフは「押したらすぐ変わる」のが自然なので、Has Exit Time を外し、Duration を 0 にします。Has Exit Time を外したときは、Conditions が1つも無いと Unity が警告を出します。条件を必ず入れます。
アバターにつなぐ
作ったコントローラーを、アバターの FX につなぎます。方法は2つあります。
- Modular Avatar でつなぐ(おすすめ)
- アバターの中に置いたオブジェクトに MA の部品を付けると、アップロードするときに、MA がアバターの FX に Hat レイヤーを足してくれます。アバターのファイルを書きかえないので、アバターを更新しても消えません。いらなくなったら、オブジェクトを消すだけです。
- アバターの FX に直接足す
- アバターの FX のコントローラーに、自分で Hat レイヤーを足します。MA を使わずに済みますが、アバターのファイルを書きかえます。アバターを更新すると消えることがあり、もとのギミックをこわすおそれもあります。
Modular Avatar でつなぐ手順
- MA が入っていなければ、VCC か ALCOM で入れます(第3回 衣装を着せる)。
- Hierarchy でアバターのいちばん上を右クリックして
Create Emptyを選び、空のオブジェクトを作ります。名前を帽子にします。このあと、メニューに出る名前にもなります。 帽子を選んだまま、Inspector のAdd Componentを押してMA Merge Animatorを探して付けます。Animator to mergeの欄に、Project からHat_FXをドラッグします。Layer TypeをFXにします。Path ModeをAbsoluteにします。クリップは、アバターのいちばん上から録画したからです。Relativeにすると、この帽子オブジェクトから見たパスとして読まれ、帽子が見つからなくなります。Match Avatar Write Defaultsにチェックを入れます。ステートの Write Defaults を、アバターの FX に合わせてくれます。
▼ MA Merge Animator
- つなぎたいコントローラーです。FX に、このコントローラーのレイヤーが足されます。
- アバターのいちばん上から録画したクリップなら Absolute です。帽子オブジェクトの子を録画したときは Relative にします。
- アバターの Write Defaults が ON か OFF かを見て、足すステートをそちらに合わせます。
MA は、表示を日本語にもできます。この記事では、英語の表示の名前で書きます。
アバターの FX に直接足すとき
- Hierarchy でアバターを選び、Inspector の VRC Avatar Descriptor の
Playable Layersで、FX に入っているコントローラーを確かめます。 - Project でそのコントローラーを選び、
Ctrl + Dで複製します。VRC Avatar Descriptor の FX の欄に、複製したほうを入れます。もとのファイルを残しておくためです。 - 複製したコントローラーを開き、この記事の手順どおりに
Hatレイヤー(Weight 1)、HatOnパラメーター、2つのステートとトランジションを足します。 - ステートの
Write Defaultsは、同じ FX のほかのステートとそろえます。ON と OFF が混ざると、どの値が残るか分かりにくくなります。 - パラメーターとメニューは、VRC Avatar Descriptor の
Expressionsに入っている Parameters と Menu のファイルに足します(次の2つの節)。
アバターを更新すると、FX やメニューのファイルが上書きされて、足したものが消えることがあります。そのたびに足し直すことになるので、MA でつなぐ方法をおすすめします。Write Defaults のくわしい話は、第13回 Unity と VRChat で見た目が変わる を見てください。
パラメーターを VRChat に知らせる(Expression Parameters)
Animator の中に HatOn を作っただけでは、VRChat はそのパラメーターを知りません。Expression Parameters に登録して、はじめてメニューから動かせ、ほかの人にも送られます。MA を使うときは、MA Parameters で登録します。2つのパラメーターの関係は 第6回 Animator のしくみ で説明しています。
帽子オブジェクトを選び、Add ComponentからMA Parametersを付けます。- パラメーターを足すボタンを押し、名前に
HatOnと入れます。Animator のパラメーターと、大文字小文字まで同じにします。 - 型を
Boolにします。 Default Value(はじめの値)は、オフ(false、0)のままにします。SavedとSyncedにチェックを入れます。意味は下の表のとおりです。
▼ MA Parameters
- Animator の HatOn と同じ名前・同じ型にします。
- ワールドを移っても、アバターを着替えて戻っても、オンオフを覚えておきます。
- ほかの人に値を送ります。外すと、帽子は自分にしか見えません。
| 設定 | 入れたとき | 入れないとき |
|---|---|---|
| Saved(覚えておく) | ワールドを移っても、アバターを着替えて戻っても、最後の値のまま | ワールドを移ったり、アバターを着替えたりすると、Default に戻る |
| Synced(同期する) | ほかの人にも値が送られ、同じ見た目になる。同期できる量(256 bit)を使う。Bool は 1 bit | 自分の画面だけで変わる。ほかの人には Default のまま見える。量は使わない |
| Default(はじめの値) | はじめて着たときや、Saved を入れていないときに戻る値。帽子をはじめから出したいなら、オン(true、1)にする | — |
Default をオンにしたときは、Hierarchy の Hat もオンにしておきます。Unity の見た目と、はじめの値がそろいます。
アバターの FX に直接足すときは、VRC Avatar Descriptor の Expressions の Parameters に入っているファイルを選びます。Inspector で行を足し、名前 HatOn、型 Bool、Default、Saved、Synced を同じように決めます。
パラメーターのくわしい決まりは、VRChat の Animator Parameters のページ(新しいタブで開きます)(英語)にあります。
動かして確かめる
メニューの「帽子」を押してから、作り方のチェックを外してみてください。自分から見た姿と、ほかの人から見た姿がどう変わるか、その理由が出ます。
自分から見たあなた
ほかの人から見たあなた
メニューの「帽子」がオフなので、HatOn は false です。Hat_OFF のステートにいて、帽子は消えています。
自分からは帽子が見えません。ほかの人からは帽子が見えません。
Gesture Manager で試す
アップロードする前に、Unity の中で試します。Gesture Manager は、Unity で再生したときに VRChat のメニューやハンドサインをまねできる道具です。VCC か ALCOM で、プロジェクトに入れておきます。
- Unity の上のメニューの
Tools → Gesture Manager Emulatorを選びます。シーンにGestureManagerというオブジェクトができます(バージョンによって、メニューの場所や名前が違うことがあります)。 - 上の再生ボタン(▶)を押します。MA がこのときに Hat レイヤーを FX に足すので、再生中のアバターは、アップロードしたときと同じつながり方になります。
- Hierarchy で
GestureManagerを選びます。Inspector に、VRChat と同じ丸いメニューが出ます。 Expressionsを開き、帽子を押します。Scene か Game の画面で、帽子が出ることを確かめます。もう一度押して、消えることも確かめます。- 動かないときは、Gesture Manager のパラメーターを見る画面(バージョンによって名前が違います)で、
HatOnが変わっているかを見ます。変わっていなければメニューかパラメーター、変わっているのに帽子が出なければ、レイヤーの Weight かクリップのパスを疑います。 - 再生ボタンをもう一度押して止めます。再生中に変えた設定は、止めると元に戻ります。
アップロードして確かめる
- VRChat SDK の Builder からアップロードします。手順は 第2回 アップロードのしかた と同じです。
- VRChat でアバターを着て、Action Menu の
Expressionsを開き、帽子を押します。 - ワールドを移ったり、アバターを着替えて戻ったりして、オンオフが残っているか(Saved)を確かめます。
- ほかの人にも見えているか(Synced)は、友だちに見てもらうと確実です。
よくある困りごとと直し方
メニューを押しても何も起きない
- 起きること
- メニューの「帽子」は押せるが、帽子が出ない。Gesture Manager で見ると、HatOn は変わっている。
- 原因
- Hat レイヤーの Weight が 0 のままです。または、クリップのパスが帽子を指していません(MA の Path Mode が違うなど)。
- 直し方
- 歯車から Weight を 1 にします。クリップを Animation ウィンドウで開き、行が黄色く Missing になっていないかを確かめ、Path Mode を録画のしかたに合わせます。
HatOn が変わらない
- 起きること
- メニューを押しても、Gesture Manager の HatOn が false のまま。
- 原因
- メニューの Parameter、MA Parameters、Animator のパラメーターの名前が、どこかで違います。大文字小文字や、前後の空白も違いになります。
- 直し方
- 3か所の名前を、コピーして貼りつけてそろえます。型(Bool)もそろえます。
切り替わるのが一拍遅れる
- 起きること
- 押してから、少したって帽子が出る。消えるときも遅れる。
- 原因
- トランジションの Has Exit Time にチェックが入っているか、Transition Duration が 0 より大きいです。
- 直し方
- 2本の矢印の両方で、Has Exit Time を外し、Transition Duration を 0 にします。
勝手に出たり消えたりし続ける
- 起きること
- メニューを押していないのに、帽子が点滅するように出たり消えたりする。
- 原因
- トランジションに Conditions が無く、Has Exit Time だけで移っています。
- 直し方
- OFF から ON は HatOn が true、ON から OFF は HatOn が false の条件を入れます。
ワールドを移ると元に戻る
- 起きること
- 帽子をオンにしたのに、ワールドを移ったり、アバターを着替えて戻ったりすると消えている。
- 原因
- パラメーターの Saved にチェックが入っていません。
- 直し方
- MA Parameters(直接足したときは Expression Parameters)で Saved にチェックを入れて、アップロードし直します。
自分にしか見えない
- 起きること
- 自分の画面では帽子が出ているのに、友だちからは見えない。
- 原因
- パラメーターの Synced にチェックが入っていません。または、相手のセーフティ設定でアニメーションが止められています。
- 直し方
- Synced にチェックを入れて、アップロードし直します。相手の設定は、相手に確かめてもらいます。
オフにしても帽子が消えない
- 起きること
- 一度オンにすると、オフにしても帽子が出たまま。
- 原因
- Hat_OFF のクリップに Is Active の行が無く、Write Defaults が OFF なので、オンのときの値が残っています。
- 直し方
- Hat_OFF のクリップに、Hat の Is Active を 0 と書くキーを打ちます。
気をつけること
- アバターがもともと持っている FX やメニューのファイルは、なるべく書きかえないでください。MA でつなげば、アバターを更新しても自分のギミックが残ります。
- パラメーターの名前は、アバターのほかのギミックと重ならないものにします。同じ名前があると、2つのギミックが一緒に動きます。
- 同じコントローラーの中で、Write Defaults の ON と OFF を混ぜないでください。MA の Match Avatar Write Defaults を使うと、アバターに合わせられます。
- Synced にしたパラメーターは、同期できる量(合計 256 bit)を使います。自分にだけ見えればよいものは、Synced を外します。
- 1つのメニューに置ける項目は 8 つまでです。小物が多いときは、Sub Menu にまとめます。
- Humanoid の骨(腕や首の曲がり)は、FX のクリップでは動かしません。オブジェクトのオンオフ、BlendShape、マテリアルなどの見た目を動かします。
まとめ
- オンとオフのクリップを2つとも作ります。Write Defaults の設定に関係なく動きます。
- 自分用のコントローラーにレイヤーを足し、Weight を 1 にします。Bool のパラメーターと、2つのステートを置きます。
- トランジションは、Has Exit Time を外し、Transition Duration を 0 にして、条件を入れます。
- パラメーターは Expression Parameters(MA Parameters)に登録します。Saved は覚えておく、Synced はほかの人に送る、Default ははじめの値です。
- MA Merge Animator・MA Parameters・MA Menu Installer・MA Menu Item で、アバターのファイルを書きかえずにつなぎます。
- Gesture Manager で試してから、アップロードします。
続きの 第9回 段階で切り替える・少しずつ変えるギミック では、何着かから1つ選ぶギミックと、回して少しずつ変えるギミックを作ります。