段階で切り替える・少しずつ変えるギミック
服を何着かから1つ選ぶ、帽子の大きさや色をメニューを回して少しずつ変える。オンオフの次は、Int と Float のパラメーターを使うギミックを作ります。Any State からの切り替え、Radial Puppet と Motion Time、Blend Tree、ほかの人からの見え方まで、1クリックずつ解説します。
公開 · 対象は Unity の Built-in Render Pipeline と VRChat のアバター(Avatars 3.0)です。2026年11月時点の内容です。
こんなときに読んでください
- 服を何着か用意して、メニューで1つを選んで着替えたい。2着が同時に出ないようにしたい。
- 帽子やしっぽの大きさ、髪の色などを、メニューを回して少しずつ変えたい。
- Bool・Int・Float のどれを使えばよいか分からない。
- 回して変えたのに、ほかの人からは少し遅れて見える、段々に見える。
この回は、第8回 メニューでオンオフするギミックを作る で帽子のオンオフを作った前提で進めます。コントローラーの作り方、Weight を 1 にすること、Modular Avatar(MA)でつなぐ手順は、そちらと同じです。
Bool・Int・Float の選び方
パラメーターには3つの型があります。何をしたいかで選びます。パラメーターそのものの説明は 第6回 Animator のしくみ にあります。
| 型 | 入る値 | 同期の量 | 向いているもの | メニューの項目 |
|---|---|---|---|---|
| Bool | true か false | 1 bit | 1つのものを出す・消す | Toggle |
| Int | 0〜255 の整数 | 8 bit | 何個かから1つを選ぶ | 値ごとに Toggle か Button |
| Float | -1〜1 の小数(Radial Puppet では 0〜1) | 8 bit | 大きさや色を少しずつ変える | Radial Puppet |
- 出すか消すかの2つだけなら Bool です。いちばん量を使いません。
- 何着かから1つだけ選ぶなら Int です。値は1つしか入らないので、2着が同時に出ることがありません。3着なら Bool を3つ使うほうが量は少なく済みます(3 bit)。ただし、2つ同時にオンにできてしまいます。選ぶものが多いほど、Int のほうが得になります。
- 途中の値がほしいなら Float です。Radial Puppet(丸いダイヤルを回すメニューの項目)と組み合わせます。
- 同期できる量は、アバター全体で合計 256 bit までです。
Int で、服を3着から1つ選ぶ
アバターの中に、3着の服 Outfit_A、Outfit_B、Outfit_C があるとします。名前は例です。Int のパラメーター OutfitNo の値で、どれを出すかを決めます。0 のときは、3着とも消します。
| OutfitNo | ステート(クリップ) | Outfit_A | Outfit_B | Outfit_C |
|---|---|---|---|---|
| 0 | Outfit_0 | 0(オフ) | 0(オフ) | 0(オフ) |
| 1 | Outfit_1 | 1(オン) | 0(オフ) | 0(オフ) |
| 2 | Outfit_2 | 0(オフ) | 1(オン) | 0(オフ) |
| 3 | Outfit_3 | 0(オフ) | 0(オフ) | 1(オン) |
クリップとコントローラーを作る
- Project の自分用のフォルダ(たとえば
MyGimmicks/Outfit)を右クリックしてCreate → Animationを選び、Outfit_0〜Outfit_3の4つのクリップを作ります。中身はあとで録画します。 - 同じフォルダで
Create → Animator Controllerを選び、Outfit_FXを作ってダブルクリックで開きます。 Layersの+でレイヤーOutfitを足し、歯車からWeightを 1 にします。Parametersの+からIntを選び、名前をOutfitNoにします。Outfitレイヤーを選び、Outfit_0を最初にドラッグして、オレンジ色の最初のステートにします。続けてOutfit_1〜Outfit_3もドラッグします。
クリップを録画する
- アバターのいちばん上を選び、Inspector の
AnimatorのControllerの欄に、録画のあいだだけOutfit_FXを入れます(前の回と同じです)。 - Animation ウィンドウ(
Window → Animation → Animation)で、クリップの名前の欄からOutfit_1を選びます。 - 録画ボタンを押し、
Outfit_Aをオン、Outfit_BとOutfit_Cをオフにします(一度チェックを切り替えて戻すと、いまと同じ値でもキーが打たれます)。3つの行がそろっているかを確かめてから、録画を止めます。 Outfit_0、Outfit_2、Outfit_3も、上の表のとおりに録画します。- 終わったら、服のオンオフと、
AnimatorのControllerの欄を、もとに戻します。
どのクリップにも、3着すべての行を入れます。Outfit_2 に Outfit_A の行が無いと、Write Defaults が OFF のアバターでは、前に出ていた Outfit_A が消えずに残り、2着が重なります。
Any State からのトランジション
- Animator ウィンドウで、水色の
Any Stateを右クリックしてMake Transitionを選び、Outfit_1をクリックします。 - 矢印を選び、Inspector で
Has Exit Timeを外します。Settingsを開き、Transition Durationを 0 にし、Can Transition To Selfのチェックを外します。 Conditionsの+を押し、OutfitNo、Equals、1にします。- 同じように、
Any StateからOutfit_0、Outfit_2、Outfit_3へも矢印を引き、Equalsの数をそれぞれ 0、2、3 にします。
▼ Settings
Conditions
- 外しておかないと、OutfitNo が 1 の間、Outfit_1 に毎フレーム入り直します。
- Int では Equals(等しい)で、値ごとに行き先を分けます。
Any State は「いまどのステートにいても」という意味の入り口です。ここから矢印を引くと、どこにいても条件が合えばそのステートに移ります。4つのステートを互いに矢印でつなぐと 12 本要りますが、Any State からなら 4 本で済みます。
Can Transition To Self が付いたままだと、条件が合っている間ずっと、同じステートに入り直し続けます。オンオフだけのクリップでは見た目は変わらないこともありますが、動きのあるクリップは最初に戻り続けます。外しておきます。
メニューで1つを選ぶ
MA でつなぐ手順は、前の回と同じです。アバターの中に 着替え というオブジェクトを作り、MA Merge Animator(Outfit_FX、FX、Absolute、Match Avatar Write Defaults)と、MA Parameters を付けます。
- MA Parameters に
OutfitNoを足し、型をIntにします。Default Valueは、はじめに着ている服の番号にします(何も着ないなら 0)。SavedとSyncedにチェックを入れます。 着替えにMA Menu InstallerとMA Menu Itemを付け、Menu Item のTypeをSub Menuにします。中のメニューを、このオブジェクトの子から作るように選びます(Childrenなどと書かれた選択肢)。着替えを右クリックしてCreate Empty Childを選び、子を3つ作ります。名前を制服、パーカー、ワンピースにします。メニューに出る名前です。- 3つの子それぞれに
MA Menu Itemを付け、TypeをToggle、ParameterをOutfitNoにします。Valueを、制服は 1、パーカーは 2、ワンピースは 3 にします。
▼ MA Menu Item
▼ MA Menu Item
- 押すと、中にもう1つのメニューが開きます。子の3つが、そこに並びます。
- 押すと OutfitNo が 2 になります。項目ごとに数を変えます。
Toggle は、オンにすると Parameter を Value の数にし、オフにすると 0 に戻します。「パーカー」を押すと OutfitNo は 2 になり、Outfit_2 に移ります。
続けて「ワンピース」を押すと 3 になります。OutfitNo はもう 2 ではないので、「パーカー」の項目は自然にオフの表示になります。1つしか選べないのは、このためです。
選んでいる「ワンピース」をもう一度押すと 0 に戻り、3着とも消えます。
アバターの FX に直接足すときは、Expression Parameters に Int の行を足し、Expressions Menu で Add Control を押して Type を Sub Menu にし、中のメニューのファイルに Toggle を3つ並べます。くわしくは VRChat の Expressions Menu のページ(新しいタブで開きます)(英語)にあります。
Float と Radial Puppet で、少しずつ変える
帽子の大きさを、メニューのダイヤルを回して変えます。Float のパラメーター HatSize(0〜1)を、1つのクリップの「どこを再生するか」に使います。これが Motion Time です。
- Radial Puppet を回すHatSize = 0〜1
- ステートの Motion TimeHatSize をクリップの位置にする
- クリップの 0〜60 フレーム0.5 なら 30 フレーム目
- 見た目その位置の大きさになる
クリップとステートを作り、Motion Time を付ける
- Project で
Create → Animationを選び、Hat_Sizeを作ります。中身はあとで録画します。 Create → Animator ControllerでHatSize_FXを作って開き、レイヤーHatSizeを足してWeightを 1 にします。Parametersの+からFloatを選び、名前をHatSizeにします。Hat_Sizeを Animator ウィンドウにドラッグして、ステートを作ります。オレンジ色の最初のステートになります。トランジションは要りません。- ステートを選び、Inspector の
Motion Timeの行のParameterにチェックを入れ、右の欄でHatSizeを選びます。 Write Defaultsは、ほかのステートとそろえます(MA の Match Avatar Write Defaults を使うなら、合わせてくれます)。
- クリップを時間で再生するかわりに、HatSize の値の位置で止めます。0 ならはじめ、1 なら終わりです。
はじめと終わりにキーを打つ
- アバターのいちばん上の
AnimatorのControllerの欄に、録画のあいだだけHatSize_FXを入れます。Animation ウィンドウでHat_Sizeを選び、録画ボタンを押します。 - フレームの欄(再生ボタンの右の数)が 0 なのを確かめ、Hierarchy で
Hatを選び、Inspector の Transform のScaleを X・Y・Z とも 0.5 にします。 - フレームの欄に 60 と入れて、60 フレーム目に移ります。
Scaleを X・Y・Z とも 1.5 にします。録画を止めます。 - Animation ウィンドウ下の
Curvesを押し、キーをすべて選んで右クリックし、Both Tangents → Linearを選びます。キーの間が一定の割合で変わるようになります(はじめのままだと、端の近くがゆっくり変わる曲線になることがあります)。 - Project で
Hat_Sizeを選び、Inspector のLoop Timeのチェックを外します。付いたままだと、いちばん端(1)で最初の形に戻って見えることがあります。 Hatの Scale が録画の前に戻っているかを確かめ、AnimatorのControllerの欄をもとに戻します。
色を変えるときも同じです。0 フレーム目と 60 フレーム目に、マテリアルの色の行(Mesh Renderer : Material._Color のような行。名前はシェーダーによって違います)のキーを打ちます。
アバターにつなぎ、メニューに足す
- MA でつなぐときは、オブジェクト
帽子の大きさを作り、MA Merge Animator(HatSize_FX)と MA Parameters を付けます。HatSizeをFloatで足し、Default Valueを 0.5(Scale 1.0 にあたる)にし、SavedとSyncedにチェックを入れます。 - MA Menu Installer と MA Menu Item を付け、
TypeをRadial Puppetにします。回す値を入れる欄(Rotation と書かれた欄)にHatSizeを入れます。 - VRChat でこの項目を押すとダイヤルが開き、回すと HatSize が 0〜1 で変わります。
もう1つの方法:Blend Tree(1D)
Blend Tree は、パラメーターの値に合わせて、いくつかのクリップを混ぜる部品です。Motion Time のかわりに使えます。
- Project で、空のクリップ
Hat_SmallとHat_Bigを作ります。 HatSizeレイヤーの何もないところを右クリックしてCreate State → From New Blend Treeを選びます。Motion Time のステートのかわりに使うので、こちらを右クリックしてSet as Layer Default Stateにします。- できたステートをダブルクリックすると、中の
Blend Treeが見えます。それをクリックします。 - Inspector で
Blend Typeを1D、ParameterをHatSizeにします。 Motionの+からAdd Motion Fieldを2回選び、Hat_SmallとHat_Bigを入れます。Automate Thresholdsのチェックを外し、Hat_Smallの Threshold を 0、Hat_Bigを 1 にします。- 上と同じように録画して、
Hat_Smallには Scale 0.5、Hat_Bigには Scale 1.5 のキーを、0 フレーム目にだけ打ちます。キーの間は Blend Tree が混ぜるので、Linear にする手間はありません。
どちらを使うか:クリップ1つで済む Motion Time のほうが手早く作れます。真ん中にも形を決めたいとき(0 で小さく、0.5 でふつう、1 で大きく、の3つ)や、クリップを分けて管理したいときは、Blend Tree が向いています。
Blend Tree は、パラメーターが Float のときに使えます。VRChat は、Expression Parameters と Animator で型が違うとき、値を変換して渡すことがあります。たとえば Expression Parameters では Bool にしておき、Animator では同じ名前を Float にして Blend Tree に使う、という組み方があります。
動かして確かめる
Radial Puppet を回したつもりで、値を動かしてみてください。Motion Time で、60 フレームのクリップのどこが使われるかと、その見た目が変わります。
見た目
クリップの中の位置
HatSize が 0.50 なので、60 フレームのクリップの 30 フレーム目の値が使われます。
帽子の Scale は 1.00 です。
ほかの人に届く値は、目安で 0.504 です(8 bit に丸められるため)。
同期と精度、ほかの人からの見え方
Bool と Int は、ほかの人にも同じ値が届きます。OutfitNo が 2 なら、ほかの人の画面でも 2 です。
Float は、ほかの人に送るときに 8 bit に丸められます。-1〜1 を 255 段ほどに分けるので、細かさはおよそ 1/127 ずつです。自分の画面の 0.503 が、ほかの人には 0.504 になる、というくらいの差です。大きさや色なら、まず気づきません。
値は、少し遅れて届きます。ダイヤルを速く回すと、ほかの人からは、遅れて追いかけるように見えたり、段々に変わって見えたりすることがあります。
公式の説明では、ダイヤル(Radial Puppet など)を開いて回している間は、値をこまめに送り、ほかの人の側でなめらかにつなぐ、とされています。ただし、どれくらいなめらかに見えるかは、通信の状態などで変わります。回し終えたあとの値は、ほかの人にも届きます。途中の動きまでぴったり同じには見えない、と考えておくと安心です。
くわしい決まりは、VRChat の Animator Parameters のページ(新しいタブで開きます)(英語)にあります。
| パラメーター | 型 | 同期の量 |
|---|---|---|
| HatOn | Bool | 1 bit |
| OutfitNo | Int | 8 bit |
| HatSize | Float | 8 bit |
| 合計 | 17 bit(256 bit まで使える) |
- Synced を外したパラメーターは、量を使いません。そのかわり、ほかの人には Default のままに見えます。自分だけが見られればよいものに使います。
- 量が 256 bit を超えると、アップロードできません。Expression Parameters の Inspector などに、いま使っている量が出ます。
よくある困りごとと直し方
2着が同時に出る
- 起きること
- 別の服を選んだのに、前の服が消えずに重なる。
- 原因
- クリップに、ほかの服の行(Is Active が 0)が入っていません。Write Defaults が OFF なので、前の値が残っています。
- 直し方
- Outfit_0〜Outfit_3 のどのクリップにも、3着すべての Is Active の行を入れます。
選んでも切り替わらない
- 起きること
- メニューで服を押しても、何も変わらない。
- 原因
- Animator のパラメーターの名前か型(Int)が違うか、Any State からの矢印の Equals の数が違います。レイヤーの Weight が 0 のこともあります。
- 直し方
- 名前と型を、MA Parameters と Animator でそろえます。矢印の数と、メニューの Value が合っているかを確かめます。
動きのあるクリップが最初から再生され続ける
- 起きること
- 選んだ服に揺れなどのアニメーションを付けたら、ずっと最初の形で止まって見える。
- 原因
- Any State からの矢印で、Can Transition To Self にチェックが入っています。毎フレーム入り直しています。
- 直し方
- Any State から出る矢印のすべてで、Can Transition To Self を外します。
回しても大きさが変わらない
- 起きること
- Radial Puppet を回しても、帽子の大きさが変わらない。
- 原因
- ステートの Motion Time の Parameter にチェックが入っていないか、クリップに 0 フレーム目のキーしか無いです。
- 直し方
- Motion Time にチェックを入れて HatSize を選びます。クリップの 0 フレーム目と終わりの両方にキーを打ちます。
いちばん大きくすると、小さく戻る
- 起きること
- ダイヤルを最後まで回すと、いちばん小さい形になる。
- 原因
- クリップの Loop Time にチェックが入っていて、終わりが最初とつながっています。
- 直し方
- Project でクリップを選び、Inspector の Loop Time を外します。
真ん中が速く、両端がゆっくり変わる
- 起きること
- 回したぶんだけ変わらず、端の近くではあまり変わらない。
- 原因
- キーの間の曲線が、端でゆるやかになっています。
- 直し方
- Animation ウィンドウの Curves でキーを選び、右クリックから Both Tangents → Linear にします。
ほかの人には遅れて見える
- 起きること
- 自分ではなめらかに変わるのに、友だちからは遅れて、段々に変わって見えると言われた。
- 原因
- Float の値はネットワークで少し遅れて届き、8 bit に丸められます。
- 直し方
- ふつうのことなので、回し終えたあとの値が合っていれば問題ありません。速い動きを見せたいときは、Float を回すのではなく、クリップ自体を再生する組み方にします。
気をつけること
- Int で切り替えるときは、どのクリップにも、切り替えるものすべての行を入れます。
- Any State から出る矢印は、Can Transition To Self を外します。
- Motion Time に使うクリップは、Loop Time を外し、はじめと終わりにキーを打ちます。
- Float は 8 bit に丸められて、少し遅れてほかの人に届きます。ぴったり同じ値が要るものは、Int で段階に分けます。
- 同期の量は、アバター全体で 256 bit までです。服のギミックなど、ほかのツールが足すパラメーターも数に入ります。
- 大きさを変えるときは、Humanoid の骨ではなく、小物のオブジェクトの Scale を動かします。
まとめ
- オンオフは Bool、何個かから1つ選ぶなら Int、少しずつ変えるなら Float です。
- Int は、Any State から Equals の条件で各ステートへ移ります。Can Transition To Self は外します。
- メニューの Toggle は、オンでその Value、オフで 0 にします。値ごとに項目を作ると、1つだけ選べます。
- Float は Radial Puppet で回し、ステートの Motion Time でクリップの位置にします。Blend Tree でも作れます。
- Float は 8 bit に丸められ、少し遅れてほかの人に届きます。
次の 第10回 ハンドサインで表情を変える では、ハンドサインの番号で表情を切り替えます。