VRChat 非公式日本語ドキュメント

Animator Parameters

caution

このドキュメントには、Unityの Animator Controllers および Animation Parameters に関する知識が必要です。

アバターの Playable Layers で Animator Parameters を使用することで、アバターの Animator ステートを制御したり、影響を与えたりすることができます。

tip

パラメータは常に変化する可能性があることを前提としてください。「行き止まり」を作らないようにしましょう。ステートに出口がない場合、アバターの Animator が正常に動作しなくなる可能性があります。

ビルトインパラメータ

アバターの Playable Layers に追加することで、VRChat のビルトインアバターパラメータにアクセスできます。

これらのパラメータを追加すると、VRChat 内の状況に応じて値が自動的に更新されます。例えば、VelocityMagnitude パラメータを追加すると、プレイヤーの現在の速度に基づいてその値が更新されます。

すべてのビルトインパラメータは読み取り専用です。これらを Expressions MenuOSC で変更することはできません。

以下のリストには、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.25.0)に対する、メートル単位でのアバターの目の高さの比率。2m に拡大されたアバターは、(2.0 - 0.2) / (5.0 - 0.2) = 0.375 と報告します。 Float Playable

パラメータの型

Expression Parameters アセット では、以下の型のパラメータを定義できます。

パラメータの型 範囲 パラメータメモリ使用量 備考
int 0255 8 bits 符号なし 8ビット整数。
float -1.01.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状態は、以下の状況でトリガーされます。

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 頭部と手のトラッキング。VRMode1 の場合、このユーザーは3点VRの状態です。VRMode0 の場合、ヒューマノイドアバターを使用したデスクトップユーザーです。
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 の見た目。

tip

Expression Parameters アセットの作成方法については、Expressions Menu のドキュメントをご覧ください。

カスタムパラメータの制御方法

アバターの Playable Layers と Expression Parameters アセットでカスタムパラメータを設定した後、以下の3つの方法でパラメータを制御できます。

デフォルトの AV3 エイリアシング

独自のコントローラーを作成したくない場合のために、テンプレートの AV3 VRChat コントローラーで使用される「デフォルト」がいくつか用意されています。これらは、名前を重複させない限り、エイリアシング(別名参照)によって独自のパラメータと衝突することはありません。

特に、デフォルトの Action レイヤーと FX レイヤーはエイリアシングを使用しています。これらのレイヤーに含まれる Expression を使用することを心配する必要はありません。

Action は VRCEmote というエイリアスされたパラメータを使用します。これは 1 から 16 の範囲を持つ Int 型です。

FX は VRCFaceBlendH (-1, 1) および VRCFaceBlendV (-1, 1) というエイリアスされた Float パラメータを使用します。独自のメニューでこれらを利用したい場合は試してみてください。デフォルトの FX レイヤーを使用するには、Body という名前の Skinned Mesh があり、その中に mood_happymood_sadmood_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は自動的に AFKtruefalse ではなく、1.0 または 0.0 に設定します。これにより、アニメーターの Blend Tree 内で AFK パラメーターを使用することも可能になります。

以下の表は、一致しないパラメーターを変換した際にどのように変化するかを示しています。

Source Type Animator Type 変換動作 Example
int float float に直接変換されます。 11.0
int bool 0false 、それ以外は true になります。 1true
float int 最も近い int に丸められます(Mathf.Round と同様)。 0.50, 0.61, 1.52
float bool 0.0false 、それ以外は true になります。 0.5true
bool int true1false0 になります。 true1
bool float true1.0false0.0 になります。 true1.0

Trigger 型パラメーター

現時点では、アニメーションコントローラーで Trigger 型のパラメーターを使用することはお勧めしません。これらの値は、アバターのバージョン間(アバターを表示しているリモートクライアントや、鏡越しにアバターを表示している際などの特殊な状況を含む)で同期がずれる可能性があります。アバターの状態を表現する場合は、Int、Float、または Bool 型のパラメーターを使用してください。

同期タイプ

VRChatでは、組み込みパラメータのほとんどがインスタンス内の他のプレイヤーと同期されます。また、独自のカスタムパラメータに対しても同期を有効にできます。

同期タイプは、VRChatが各パラメータをどのように同期するかを決定するものです。パラメータは以下のいずれかの同期タイプを使用します。

カスタムパラメータの同期を有効にした場合、VRChatは通常 Playable 同期タイプを使用します。ただし、パペットコントロールでパラメータを制御する場合、VRChatは同期タイプを Playable から IK に切り替え、更新頻度と補間処理を向上させます。パペットコントロールを閉じると、同期タイプは Playable に戻ります。


  1. GestureLeftWeightGestureRightWeight は、トリガーの引き具合に応じて様々なジェスチャーで 0.0 から 1.0 の間で変化します。例えば、左手で握り拳を作ってもトリガーを引いていない場合、GestureLeft は 1 になりますが、GestureLeftWeight は 0.0 となります。トリガーを引き始めると、値は 0.0 から 1.0 に向かって上昇します。これを利用して「アナログ」なジェスチャーを作成したり、様々な条件を検出したりすることができます。 

  2. リモートで同期される float 値には 255 通りの値があり、ネットワーク経由で 1/127 の精度を提供します。また、-1.00.01.0 を正確に保存できます。ローカルで更新された場合(OSC を使用する場合など)、float 値は Animator 内でネイティブ(32ビット)浮動小数点数として保存されます。 

最終更新: