アバター改変の解説 第9回

段階で切り替える・少しずつ変えるギミック

服を何着かから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 のしくみ にあります。

型入る値同期の量向いているものメニューの項目
Booltrue か false1 bit1つのものを出す・消すToggle
Int0〜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_AOutfit_BOutfit_C
0Outfit_00(オフ)0(オフ)0(オフ)
1Outfit_11(オン)0(オフ)0(オフ)
2Outfit_20(オフ)1(オン)0(オフ)
3Outfit_30(オフ)0(オフ)1(オン)

クリップとコントローラーを作る

  1. Project の自分用のフォルダ(たとえば MyGimmicks/Outfit)を右クリックして Create → Animation を選び、Outfit_0〜Outfit_3 の4つのクリップを作ります。中身はあとで録画します。
  2. 同じフォルダで Create → Animator Controller を選び、Outfit_FX を作ってダブルクリックで開きます。
  3. Layers の + でレイヤー Outfit を足し、歯車から Weight を 1 にします。
  4. Parameters の + から Int を選び、名前を OutfitNo にします。
  5. Outfit レイヤーを選び、Outfit_0 を最初にドラッグして、オレンジ色の最初のステートにします。続けて Outfit_1〜Outfit_3 もドラッグします。

クリップを録画する

  1. アバターのいちばん上を選び、Inspector の Animator の Controller の欄に、録画のあいだだけ Outfit_FX を入れます(前の回と同じです)。
  2. Animation ウィンドウ(Window → Animation → Animation)で、クリップの名前の欄から Outfit_1 を選びます。
  3. 録画ボタンを押し、Outfit_A をオン、Outfit_B と Outfit_C をオフにします(一度チェックを切り替えて戻すと、いまと同じ値でもキーが打たれます)。3つの行がそろっているかを確かめてから、録画を止めます。
  4. Outfit_0、Outfit_2、Outfit_3 も、上の表のとおりに録画します。
  5. 終わったら、服のオンオフと、Animator の Controller の欄を、もとに戻します。

どのクリップにも、3着すべての行を入れます。Outfit_2 に Outfit_A の行が無いと、Write Defaults が OFF のアバターでは、前に出ていた Outfit_A が消えずに残り、2着が重なります。

Any State からのトランジション

  1. Animator ウィンドウで、水色の Any State を右クリックして Make Transition を選び、Outfit_1 をクリックします。
  2. 矢印を選び、Inspector で Has Exit Time を外します。Settings を開き、Transition Duration を 0 にし、Can Transition To Self のチェックを外します。
  3. Conditions の + を押し、OutfitNo、Equals、1 にします。
  4. 同じように、Any State から Outfit_0、Outfit_2、Outfit_3 へも矢印を引き、Equals の数をそれぞれ 0、2、3 にします。
再現図:Unity の Inspector(Any State から Outfit_1 へのトランジション)。並びや見た目は簡単にしています。名前は例です
  1. 外しておかないと、OutfitNo が 1 の間、Outfit_1 に毎フレーム入り直します。
  2. 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 を付けます。

  1. MA Parameters に OutfitNo を足し、型を Int にします。Default Value は、はじめに着ている服の番号にします(何も着ないなら 0)。Saved と Synced にチェックを入れます。
  2. 着替え に MA Menu Installer と MA Menu Item を付け、Menu Item の Type を Sub Menu にします。中のメニューを、このオブジェクトの子から作るように選びます(Children などと書かれた選択肢)。
  3. 着替え を右クリックして Create Empty Child を選び、子を3つ作ります。名前を 制服、パーカー、ワンピース にします。メニューに出る名前です。
  4. 3つの子それぞれに MA Menu Item を付け、Type を Toggle、Parameter を OutfitNo にします。Value を、制服 は 1、パーカー は 2、ワンピース は 3 にします。
再現図:MA Menu Item(英語の表示)。左が親の着替え、右が子のパーカー。並びや見た目は簡単にしています。名前は例です
  1. 押すと、中にもう1つのメニューが開きます。子の3つが、そこに並びます。
  2. 押すと 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 です。

  1. Radial Puppet を回すHatSize = 0〜1
  2. ステートの Motion TimeHatSize をクリップの位置にする
  3. クリップの 0〜60 フレーム0.5 なら 30 フレーム目
  4. 見た目その位置の大きさになる

クリップとステートを作り、Motion Time を付ける

  1. Project で Create → Animation を選び、Hat_Size を作ります。中身はあとで録画します。
  2. Create → Animator Controller で HatSize_FX を作って開き、レイヤー HatSize を足して Weight を 1 にします。
  3. Parameters の + から Float を選び、名前を HatSize にします。
  4. Hat_Size を Animator ウィンドウにドラッグして、ステートを作ります。オレンジ色の最初のステートになります。トランジションは要りません。
  5. ステートを選び、Inspector の Motion Time の行の Parameter にチェックを入れ、右の欄で HatSize を選びます。
  6. Write Defaults は、ほかのステートとそろえます(MA の Match Avatar Write Defaults を使うなら、合わせてくれます)。
再現図:Unity の Inspector(Hat_Size のステート)。並びや見た目は簡単にしています。名前は例です
  1. クリップを時間で再生するかわりに、HatSize の値の位置で止めます。0 ならはじめ、1 なら終わりです。

はじめと終わりにキーを打つ

  1. アバターのいちばん上の Animator の Controller の欄に、録画のあいだだけ HatSize_FX を入れます。Animation ウィンドウで Hat_Size を選び、録画ボタンを押します。
  2. フレームの欄(再生ボタンの右の数)が 0 なのを確かめ、Hierarchy で Hat を選び、Inspector の Transform の Scale を X・Y・Z とも 0.5 にします。
  3. フレームの欄に 60 と入れて、60 フレーム目に移ります。Scale を X・Y・Z とも 1.5 にします。録画を止めます。
  4. Animation ウィンドウ下の Curves を押し、キーをすべて選んで右クリックし、Both Tangents → Linear を選びます。キーの間が一定の割合で変わるようになります(はじめのままだと、端の近くがゆっくり変わる曲線になることがあります)。
  5. Project で Hat_Size を選び、Inspector の Loop Time のチェックを外します。付いたままだと、いちばん端(1)で最初の形に戻って見えることがあります。
  6. Hat の Scale が録画の前に戻っているかを確かめ、Animator の Controller の欄をもとに戻します。

色を変えるときも同じです。0 フレーム目と 60 フレーム目に、マテリアルの色の行(Mesh Renderer : Material._Color のような行。名前はシェーダーによって違います)のキーを打ちます。

アバターにつなぎ、メニューに足す

  1. MA でつなぐときは、オブジェクト 帽子の大きさ を作り、MA Merge Animator(HatSize_FX)と MA Parameters を付けます。HatSize を Float で足し、Default Value を 0.5(Scale 1.0 にあたる)にし、Saved と Synced にチェックを入れます。
  2. MA Menu Installer と MA Menu Item を付け、Type を Radial Puppet にします。回す値を入れる欄(Rotation と書かれた欄)に HatSize を入れます。
  3. VRChat でこの項目を押すとダイヤルが開き、回すと HatSize が 0〜1 で変わります。

もう1つの方法:Blend Tree(1D)

Blend Tree は、パラメーターの値に合わせて、いくつかのクリップを混ぜる部品です。Motion Time のかわりに使えます。

  1. Project で、空のクリップ Hat_Small と Hat_Big を作ります。
  2. HatSize レイヤーの何もないところを右クリックして Create State → From New Blend Tree を選びます。Motion Time のステートのかわりに使うので、こちらを右クリックして Set as Layer Default State にします。
  3. できたステートをダブルクリックすると、中の Blend Tree が見えます。それをクリックします。
  4. Inspector で Blend Type を 1D、Parameter を HatSize にします。
  5. Motion の + から Add Motion Field を2回選び、Hat_Small と Hat_Big を入れます。
  6. Automate Thresholds のチェックを外し、Hat_Small の Threshold を 0、Hat_Big を 1 にします。
  7. 上と同じように録画して、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 フレームのクリップのどこが使われるかと、その見た目が変わります。

見た目

クリップの中の位置

0.50

クリップで変えるもの

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 のページ(新しいタブで開きます)(英語)にあります。

パラメーター型同期の量
HatOnBool1 bit
OutfitNoInt8 bit
HatSizeFloat8 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回 ハンドサインで表情を変える では、ハンドサインの番号で表情を切り替えます。

アバター改変の解説の一覧