Animator Parameters
このドキュメントには、Unityの Animator Controllers および Animation Parameters に関する知識が必要です。
アバターの Playable Layers で Animator Parameters を使用することで、アバターの Animator ステートを制御したり、影響を与えたりすることができます。
- 一部のパラメータは VRChat に組み込まれており、どの Playable Layer でも使用可能です。
- カスタムパラメータを独自に作成することもできます。これには Expression Parameters asset を作成する必要があります。
パラメータは常に変化する可能性があることを前提としてください。「行き止まり」を作らないようにしましょう。ステートに出口がない場合、アバターの Animator が正常に動作しなくなる可能性があります。
ビルトインパラメータ
アバターの Playable Layers に追加することで、VRChat のビルトインアバターパラメータにアクセスできます。
これらのパラメータを追加すると、VRChat 内の状況に応じて値が自動的に更新されます。例えば、VelocityMagnitude パラメータを追加すると、プレイヤーの現在の速度に基づいてその値が更新されます。
すべてのビルトインパラメータは読み取り専用です。これらを Expressions Menu や OSC で変更することはできません。
以下のリストには、VRChat のすべてのビルトインパラメータ、その説明、型、および 同期タイプ が記載されています。
| 名前 | 説明 | 型 | 同期 |
|---|---|---|---|
| IsLocal | アバターをローカルで着用している場合はtrue、それ以外はfalse | Bool | None |
| PreviewMode | アバターがプレビューされている場合は 1、そうでない場合は 0 を返す |
Int | None |
| Viseme | Oculus Viseme(口形)インデックス (0-14)。Jawbone/Jawflapを使用する場合、範囲は音量を示す 0-100 となる |
Int | Speech |
| Voice | マイク音量 (0.0-1.0) |
Float | Speech |
| GestureLeft | 左手コントローラーのジェスチャー (0-7) | Int | IK |
| GestureRight | 右手コントローラーのジェスチャー (0-7) | Int | IK |
| GestureLeftWeight | 左トリガーのアナログ値 (0.0-1.0)1 | Float | Playable |
| GestureRightWeight | 右トリガーのアナログ値 (0.0-1.0)1 | Float | Playable |
| AngularY | Y軸の角速度 | Float | IK |
| VelocityX | 横方向の移動速度 (m/s) | Float | IK |
| VelocityY | 垂直方向の移動速度 (m/s) | Float | IK |
| VelocityZ | 前後方向の移動速度 (m/s) | Float | IK |
| VelocityMagnitude | 速度の合計値 | Float | IK |
| Upright | 「直立」状態。0は伏せ、1は直立 | Float | IK |
| Grounded | プレイヤーが地面に触れている場合はtrue | Bool | IK |
| Seated | プレイヤーがステーションに乗っている場合はtrue | Bool | IK |
| AFK | プレイヤーが離席中か (HMD近接センサー / Endキー) | Bool | IK |
| TrackingType | 以下の説明を参照 | Int | Playable |
| VRMode | ユーザーがVRの場合は 1、そうでない場合は 0 を返す |
Int | IK |
| MuteSelf | ユーザー自身がミュート中の場合は true、ミュート解除時は false を返す |
Bool | Playable |
| InStation | ユーザーがステーションに乗っている場合は true、そうでない場合は false を返す |
Bool | IK |
| Earmuffs | ユーザーのイヤーマフ機能がオンの場合は true、オフの場合は false を返す |
Bool | Playable |
| IsOnFriendsList | アバターを見ているユーザーが、アバターを着用しているユーザーとフレンドである場合は true を返す。ローカルで false となる |
Bool | Other |
| AvatarVersion | アバターがVRChat SDK3 (2020.3.2) 以降でビルドされている場合は 3、そうでない場合は 0 を返す |
Int | IK |
| IsAnimatorEnabled | アバターのAnimatorが無効化される1フレーム前に false、有効化されている時に true を返す |
Bool | None |
アバターのスケール(拡大縮小)パラメータ
Playable Layer は、以下のパラメータを使用して、プレイヤーの現在の アバタースケール に反応させることができます。
| 名前 | 説明 | 型 | 同期 |
|---|---|---|---|
ScaleModified |
ユーザーがアバターのスケール機能を使用して拡大縮小されている場合は true を、アバターがデフォルトサイズの場合は false を返します。 |
Bool | Playable |
ScaleFactor |
アバターのデフォルトの高さと現在の高さの比率。デフォルトの目の高さが 1m のアバターを 2m に拡大した場合、2 を報告します。 |
Float | Playable |
ScaleFactorInverse |
アバターのデフォルトの高さと現在の高さの逆比率(1/x)。デフォルトの目の高さが 1m のアバターを 2m に拡大した場合、0.5 を報告します。極端な値では不正確になる可能性があります。 |
Float | Playable |
EyeHeightAsMeters |
メートル単位でのアバターの目の高さ。 | Float | Playable |
EyeHeightAsPercent |
デフォルトの拡大縮小制限(0.2 ~ 5.0)に対する、メートル単位でのアバターの目の高さの比率。2m に拡大されたアバターは、(2.0 - 0.2) / (5.0 - 0.2) = 0.375 と報告します。 |
Float | Playable |
パラメータの型
Expression Parameters アセット では、以下の型のパラメータを定義できます。
| パラメータの型 | 範囲 | パラメータメモリ使用量 | 備考 |
|---|---|---|---|
int |
0 ~ 255 |
8 bits | 符号なし 8ビット整数。 |
float |
-1.0 ~ 1.0 |
8 bits | 符号付き 8ビット固定小数点数2。 |
bool |
True または False |
1 bit |
同期される各パラメータは、一定量のパラメータメモリを消費します。VRChat では最大 256 ビットのカスタムパラメータを同期できます。また、VRChat はアバターの Expression Parameters の合計(同期・非同期を含む)を 8192 個までと制限しています。組み込みパラメータ はこの制限に含まれません。
GestureLeft および GestureRight の値
GestureLeft および GestureRight は、以下の値をそれぞれ使用します。
| インデックス | ジェスチャー |
|---|---|
| 0 | Neutral |
| 1 | Fist |
| 2 | HandOpen |
| 3 | FingerPoint |
| 4 | Victory |
| 5 | RockNRoll |
| 6 | HandGun |
| 7 | ThumbsUp |
Viseme(口形)の値
Oculus の Viseme インデックス を上から順に使用しており、sil は 0 となります。参考として以下を参照してください:
| Viseme Parameter | Viseme(口形) |
|---|---|
| 0 | sil |
| 1 | pp |
| 2 | ff |
| 3 | th |
| 4 | dd |
| 5 | kk |
| 6 | ch |
| 7 | ss |
| 8 | nn |
| 9 | rr |
| 10 | aa |
| 11 | e |
| 12 | i |
| 13 | o |
| 14 | u |
AFK State
AFK状態は、以下の状況でトリガーされます。
- ユーザーがヘッドセットを外し、HMDの近接センサーによってヘッドセットを装着していないと判定された場合。
- システムメニューが開いている場合。これは使用しているプラットフォームがシステムメニュー表示時にどのようにデータを配信するかによって異なります。例えば、Oculus DashはAFKとして登録されませんが、SteamVRのメニューはAFKとして登録されます。これは意図的な動作ではなく、副次的な影響によるものです。
- ユーザーがEndキーを押して、AFK状態を切り替えた場合。
TrackingType Parameter
TrackingType は、いくつかの情報を示しています。
値が3、4、または6で、かつ VRMode が1の場合、アバターの着用者が有効にして現在トラッキングしているポイントの数を示します。この値は変化する可能性があります! 6点トラッキング中のユーザーが、追加の3つのトラッキングポイントを外した場合、値は6から3に変わります。Animatorを設計する際は、この点を考慮してください。
値が0、1、または2で、かつ VRMode が1の場合、アバターがまだ初期化中であることを示します。この値の組み合わせに基づいて分岐するようにAnimatorを設計すべきではありません。その代わりに、3、4、または6といった「有効な」値になるのを待つようにしてください。
アバターの初期化中、この値は変化する可能性があります。Animatorが値の変化に対応できるようにし、どの分岐においても「行き止まり」にならないようにしてください。
| Parameter | Description |
|---|---|
| 0 | 未初期化。通常はユーザーがアバターを切り替えており、IKの送信がまだ行われていない場合にのみ発生します。 |
| 1 | Genericリグ。ユーザーは何らかのトラッキングを行っている可能性がありますが、アバターがGenericとしてリグされているため、トラッキングは無視されます。VRMode が0の場合、デスクトップユーザーである可能性があります。 |
| 2 | AV2でのみ発生するため、AV3コントローラーを使用するアバターにおいて長時間この状態になることは想定しないでください。SDK3のステーションでは引き続き発生する可能性があります。 指のない手のみのトラッキング。これはあくまで遷移状態においてのみ発生します。つまり、 TrackingType は再度変化することが想定されるため、アバターをこの状態のままにしないでください。 |
| 3 | 頭部と手のトラッキング。VRMode が 1 の場合、このユーザーは3点VRの状態です。VRMode が 0 の場合、ヒューマノイドアバターを使用したデスクトップユーザーです。 |
| 4 | 4点VRユーザー。頭部、手、および腰。 |
| 5 | 5点VRユーザー。頭部、手、足がトラッキングされています。基本的にはフルボディトラッキングですが、腰が含まれていません。 |
| 6 | フルボディトラッキングVRユーザー。頭部、手、腰、および足がトラッキングされています。 |
カスタムパラメータ
アバターの Playable Layers に独自のパラメータを追加できます。 Expression Parameters アセットを作成することで、VRChat 内でのパラメータ制御が可能になります。例えば、Expressions Menu を設定して、VRChat 内でユーザーがアバターをカスタマイズできるようにすることが可能です。
Expression Parameters アセット
Expression Parameters アセットには、Playable Layers が使用できるカスタムパラメータのリストが含まれています。各パラメータには名前、型、デフォルト値があります。また、パラメータを他のプレイヤーと同期するかどうかを選択することもでき、これにより Animator やカスタムパラメータによって生じた変化を他のプレイヤーにも見せることができます。
![]()
Expression Parameters アセットの作成方法については、Expressions Menu のドキュメントをご覧ください。
カスタムパラメータの制御方法
アバターの Playable Layers と Expression Parameters アセットでカスタムパラメータを設定した後、以下の3つの方法でパラメータを制御できます。
- Expressions Menu を設定する。これにより、VRChat 内で衣装の切り替えやカスタムアニメーションの再生といったパラメータ制御を簡単に行えるようになります。Expressions Menu は、カスタムパラメータを制御する最も簡単で一般的な方法です。
- Playable Layer 内の各ステートにステートビヘイビアの Avatar Parameter Driver をアタッチする。これにより、Expression Parameters アセットで定義したパラメータを自動的に設定、加算、あるいはランダム化できます。
- OSC 用にアバターを設定する。これにより、ユーザーや外部ツールからパラメータを制御できるようになります。例えば、VRCFaceTracking は、顔や目のトラッキング機器を使用してアバターの表情パラメータを制御します。
デフォルトの AV3 エイリアシング
独自のコントローラーを作成したくない場合のために、テンプレートの AV3 VRChat コントローラーで使用される「デフォルト」がいくつか用意されています。これらは、名前を重複させない限り、エイリアシング(別名参照)によって独自のパラメータと衝突することはありません。
特に、デフォルトの Action レイヤーと FX レイヤーはエイリアシングを使用しています。これらのレイヤーに含まれる Expression を使用することを心配する必要はありません。
Action は VRCEmote というエイリアスされたパラメータを使用します。これは 1 から 16 の範囲を持つ Int 型です。
FX は VRCFaceBlendH (-1, 1) および VRCFaceBlendV (-1, 1) というエイリアスされた Float パラメータを使用します。独自のメニューでこれらを利用したい場合は試してみてください。デフォルトの FX レイヤーを使用するには、Body という名前の Skinned Mesh があり、その中に mood_happy、mood_sad、mood_surprised、そして mood_angry というブレンドシェイプが含まれている必要があります。
要するに、カスタム Playable Layers を持たない Avatar3 アバターとしてアップロードした場合でも、上記の名前のブレンドシェイプが含まれていれば、組み込みのエモートをいくつか使用できるということです。
また、eyes_closed ブレンドシェイプがあれば、デフォルトの Die エモートを使用したり、AFK になった際に目を閉じさせることができます。
クロスプラットフォームのパラメータ同期
Quest 版と PC 版の両方がアップロードされているアバターを使用する場合、パラメータは名前ではなく、パラメータリスト内の位置とパラメータの型によって同期されます。あるパラメータを PC と Quest 間で同期させるには、パラメータリスト内で同じ位置にあり、同じパラメータ型である必要があります。
このため、どちらのバージョンがすべてのパラメータを使用していなくても、アバターの PC 版と Quest 版には常に同じ Expression Parameters アセットを使用するようにしてください。
不一致なパラメータ型の変換
Animator で パラメータ型 を選択する際は、使用しようとしている 組み込みパラメータ や カスタムパラメータ と同じ型を選択することをお勧めします。例えば、VRChat の組み込みパラメータ AFK を Animator 内で使用する場合は、bool 型を選択する必要があります。
ただし、パラメーターには一致しない型を選択することも可能です。VRChatは、パラメーターの値をアニメーターで使用されている型へ変換しようと試みます。例えば、AFK パラメーターに float 型を選択した場合、VRChatは自動的に AFK を true や false ではなく、1.0 または 0.0 に設定します。これにより、アニメーターの Blend Tree 内で AFK パラメーターを使用することも可能になります。
以下の表は、一致しないパラメーターを変換した際にどのように変化するかを示しています。
| Source Type | Animator Type | 変換動作 | Example |
|---|---|---|---|
int |
float |
float に直接変換されます。 |
1 → 1.0 |
int |
bool |
0 は false 、それ以外は true になります。 |
1 → true |
float |
int |
最も近い int に丸められます(Mathf.Round と同様)。 |
0.5 → 0, 0.6 → 1, 1.5 → 2 |
float |
bool |
0.0 は false 、それ以外は true になります。 |
0.5 → true |
bool |
int |
true は 1 、 false は 0 になります。 |
true → 1 |
bool |
float |
true は 1.0 、 false は 0.0 になります。 |
true → 1.0 |
Trigger 型パラメーター
現時点では、アニメーションコントローラーで Trigger 型のパラメーターを使用することはお勧めしません。これらの値は、アバターのバージョン間(アバターを表示しているリモートクライアントや、鏡越しにアバターを表示している際などの特殊な状況を含む)で同期がずれる可能性があります。アバターの状態を表現する場合は、Int、Float、または Bool 型のパラメーターを使用してください。
同期タイプ
VRChatでは、組み込みパラメータのほとんどがインスタンス内の他のプレイヤーと同期されます。また、独自のカスタムパラメータに対しても同期を有効にできます。
同期タイプは、VRChatが各パラメータをどのように同期するかを決定するものです。パラメータは以下のいずれかの同期タイプを使用します。
- Speech
- Viseme(口形)にのみ使用されます。
- 音声入力に応じてOculus Lipsyncの出力パラメータを駆動します。
- ローカルで更新され、直接的な同期は行われません(音声によって駆動されるため)。
- Playable
- 長時間実行されるアニメーション状態を同期するための、比較的低速な同期モードです。
- パラメータの変化に応じて0.1〜1秒ごとに(1秒間に1〜10回)更新されますが、高速な同期が必要な用途には適していません。
- IK
- 頻繁に変化する値を同期するための、より高速な同期モードです。
- 0.1秒ごとに継続的に(1秒間に10回)更新され、リモートユーザー側では値が
floatされます。 - パラメータによっては、アバターのローカルで計算されたIK状態に基づいて計算されることもあります。
- None
- このパラメータは他のプレイヤーと同期されません。
- 例えば、
IsLocalはローカルプレイヤーのアバターでは常に true となり、他のプレイヤーのアバターではfalseとなります。
カスタムパラメータの同期を有効にした場合、VRChatは通常 Playable 同期タイプを使用します。ただし、パペットコントロールでパラメータを制御する場合、VRChatは同期タイプを Playable から IK に切り替え、更新頻度と補間処理を向上させます。パペットコントロールを閉じると、同期タイプは Playable に戻ります。
-
GestureLeftWeightとGestureRightWeightは、トリガーの引き具合に応じて様々なジェスチャーで 0.0 から 1.0 の間で変化します。例えば、左手で握り拳を作ってもトリガーを引いていない場合、GestureLeftは 1 になりますが、GestureLeftWeightは 0.0 となります。トリガーを引き始めると、値は 0.0 から 1.0 に向かって上昇します。これを利用して「アナログ」なジェスチャーを作成したり、様々な条件を検出したりすることができます。 ↩↩ -
リモートで同期される
float値には 255 通りの値があり、ネットワーク経由で1/127の精度を提供します。また、-1.0、0.0、1.0を正確に保存できます。ローカルで更新された場合(OSC を使用する場合など)、float 値は Animator 内でネイティブ(32ビット)浮動小数点数として保存されます。 ↩
最終更新: