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

State Behaviors

Unityの知識が必要

このドキュメントは、Unity Animatorについてある程度の知識があることを前提として書かれています。

Animatorウィンドウで特定のステートを選択すると、State Behaviorsを追加できるようになります。これらはステートに対するコンポーネントのようなもので、さまざまな処理を行います。実際にいくつか追加して、何ができるか試してみてください!

すべてのState Behaviorsは、そのステートへの遷移の最初のフレームで実行されます。

State Behaviorsは、ステートマシンがそのState Behaviorsを含むステートにどれだけ長く留まっていたとしても、実行されるはずのものです。

注意

「はず」という言葉を意図的に使用しています。というのも、Unityのドキュメントにおいて、遷移やステートの期間が非常に短い場合にState Behaviorsが確実に実行されるという保証は定義されていないためです。

完全に安全を期すのであれば、このステートビヘイビアを含むステートおよびそのステートへの各遷移にかかる合計時間が最低でも0.02秒以上になるようにしてください。もっとも、実際にはこれが必要になることはほとんどないようです。

Animator Layer Controller

VRC Animator Layer Control コンポーネント

Animator Layer Controlを使用すると、任意のPlayable Layer内の特定のAnimator Layerのウェイトを、指定した時間をかけてブレンドできます。

ブレンド時間の途中でステートから出た場合、対象のレイヤーは即座に目標のウェイトに設定されます。

レイヤーのウェイトは、他のステートがこのステートビヘイビアを再度実行してリセットするまで維持されます。

Property Name説明
Playable影響を与えるPlayable Layerを選択できます。
Layer影響を与えたいPlayable Layerのインデックスです。0番目(ベース)のレイヤーのウェイトは変更できません。常に1.0に設定されます。
Goal Weightブレンド先のウェイトを定義します。
Blend Durationブレンドにかける時間を秒単位で定義します。0は即座に反映されることを意味します。
Debug StringこのStateBehaviorが実行されると、この文字列が出力ログに表示されます。デバッグに役立ちます。上記の説明を参照してください。

Animator Locomotion Control

VRC Animator Locomotion Control component

Animator Locomotion Controlは、アニメーターの特定のステートにおいて移動(Locomotion)を無効化する機能です。このLocomotion状態は、他のステートが再度このState Behaviorを実行し、設定を変更するまで維持されます。

デスクトップモードでは、並進移動が無効になり、回転(視点)移動は垂直軸のみに制限されます。VRモードでは、コントローラーによる並進移動と回転移動が無効になり、半身IKが制限されます(フルボディIKには影響しません)。いずれのモードでも、プレイヤーのカプセルは固定されます。

Parameter説明
Disable LocomotionTrueに設定すると、Locomotion(操作による移動)が無効になります。ルームスケールの移動は可能です。Falseに設定すると、Locomotionが有効になります。
Debug StringこのStateBehaviorが実行されると、この文字列が出力ログに表示されます。デバッグに便利です。

Animator Temporary Pose Space

VRC Animator Temporary Pose Space component

Animator Temporary Pose Spaceコントロールを使用すると、アバターを着用している人の視点を、そのAnimatorステートの特定の時点における頭の位置に移動させることができます。

視点は、他のステートがこのState Behaviorを再度実行してリセットまたはクリアするまで、設定されたままとなります。

この動作は、Delay Timeが経過した時に実行されます。

Animator Temporary Pose Spaceは、座ったり地面に横たわったりするなど、姿勢の変化によって視点の高さを更新する必要がある場合にのみ使用してください。これをアバターの「スケール変更」に使用することはできません。そのように使用すると、重大な不具合を引き起こします。

危険

このState Behaviorは、Delay Timeが経過する前に、設定されているステートから終了または中断された場合、実行されません!

Property NamePurpose
Pose Spaceステートに入った時(On Enter)か、ステートから出る時(On Exit)かを選択します。ステートに入った時(On Enter)はPose Spaceを設定し、ステートから出る時(On Exit)はデフォルトにリセットします。
Fixed Delay遅延時間を一定の時間にするか、ステートの持続時間に対する割合にするかを選択します。
Delay Time値を指定した場合、遅延後に視点が設定されます。一定時間をかけてアニメーションにブレンドする場合に便利です。
上記の説明を参照してください。このStateBehaviorが実行されると、指定した文字列が出力ログに記録されます。デバッグに便利です。

Animator Tracking Control

VRC Animator Tracking Control コンポーネント

Animator Tracking Controlを使用すると、アバターの体のさまざまな部位におけるIKやシミュレートされた動きの有効・無効を切り替えることができます。オプションを「No Change」に設定すると、その部位の現在の値は変更されません。「Tracking」に設定すると、IKまたはシミュレートされた動きに従うようになります。「Animation」に設定すると、アバターのAnimatorから与えられた値を強制的に適用するようになります。

すべてのIKトラッキングポイントを「Animation」に設定する場合、アニメーションはNetworked IKを介して変換されるのではなく、リモート環境でもアニメーションとして直接再生されます。各トラッキングタイプにおける「IKトラッキングポイント」は以下の通りです。

  • Desktop: Head, Left Hand, Right Hand
  • 3pt Tracking: Head, Left Hand, Right Hand
  • 6pt / FBT Tracking: Head, Left Hand, Right Hand, Hip, Left Foot, Right Foot
注意

目とまぶたを除くすべての部位はIKで制御されており、目とまぶたはシミュレートされた動きになります。口と顎はViseme(口形)によって制御されます。

例として、Left と Right Hand を Animation に設定すると、IK によって定義された手(および腕)の位置は無視され、代わりに現在アクティブなステートのモーションを使用して手と腕の位置が決定されます。Tracking に戻すと、再び IK が使用されます。

Eyes & Eyelid を Animation に設定すると、目の動きとまぶたの瞬きが無効になります。Eyes & Eyelid を Tracking に設定すると、シミュレートされた目の動きと瞬きが再び有効になります。

Mouth and Jaw を Animation に設定すると、Viseme(口形)が無効になり、Viseme(口形)パラメータの更新が停止します。Mouth and Jaw を Tracking に設定すると、Viseme(口形)が再び有効になり、更新が再開されます。

Tracking の設定は、他のステートでこの State Behavior が再度実行され、リセットされるまで保持されます。

Parameter説明
Tracking Control上記の説明を参照してください。
Debug Stringこの State Behavior が実行されると、この文字列が出力ログに表示されます。デバッグに便利です。

Avatar Parameter Driver

image

Avatar Parameter Driverは、様々な方法でAnimator Parameterを操作できます。1つのAvatar Parameterで複数の操作を実行でき、それらは上から順に処理されます。これらの操作は、このビヘイビアが設定されているステートに移行した際に1回だけ実行されます。

Local Onlyを有効にすると、isLocalを検知する代わりに、そのドライバーをローカル環境でのみ動作させます。

「Add」をクリックすると、ドライバーに新しい操作が追加されます。最初のタイプ(デフォルトで選択されています)は「Set」です。

同期されたパラメータ(VRCExpressionParametersオブジェクトで定義されたもの)を変更する場合、その値は最大範囲にクランプされます。Int型は[0, 255]、Float型は[-1, 1]となります。

ただし、Animation Controllerでのみ定義されているパラメータ(いわゆる「ローカルパラメータ」)は、引き続きパラメータドライバーで変更可能です。それらの値はクランプされません。

また、VRChatで定義されたAnimator Parameterを操作することはできません。

Set、Add、Random、Copyはfloat型およびint型で機能します。Set、Random、Copyはbool型で機能します。

Set

Setは、Destinationで指定されたパラメータに値を単純に代入します。

state-behaviors-121fe2a-2022-06-02_18-11-13_NVIDIA_Share.png

Add

Addは、Destinationで指定されたパラメータにValueを加算します。

コンポーネントにも記載されている通り、Addを使用すると、アバターのリモートインスタンスで実行した際に同じ結果にならない可能性があります。Addを使用する場合は、同期されたDestinationパラメータを使用し、ドライバーをローカルのみで実行してください。

state-behaviors-e10bb6a-2022-06-02_18-11-17_Unity.png

Random

Randomは、DestinationパラメータにMin ValueからMax Valueまでの間のランダムな数値を設定します。

コンポーネントにも記載されている通り、Randomを使用すると、アバターのリモートインスタンスで実行した際に同じ結果にならない可能性があります。Randomを使用する場合は、同期されたDestinationパラメータを使用し、ドライバーをローカルのみで実行してください。

Booleanパラメータを使用する場合は、Chance変数を使用してパラメータがtrueに設定される確率を指定できます。

Intパラメータを使用する場合は、Prevent Repeats設定を使用して、同じ値が連続して選択されるのを防ぐことができます。

state-behaviors-99c6248-2022-06-02_18-11-23_Unity.png

Copy

Copyは、Source Parameterの値をDestination Parameterに設定します。これは、あるfloatを別のfloatと一致させる、あるfloatを別の範囲にリマップする、あるいは全く異なる型同士で変換を行うといった用途に使用できます。

caution

GestureLeftWeightなどのVRChat内蔵パラメータは指定できますが、ソースパラメータとしては機能しません。

state-behaviors-bffdb10-2022-06-02_18-11-30_Unity.png

型の変換

bool から変換する場合、Falseは0、Trueは1として扱われます。

bool に変換する場合、0はFalseとなり、それ以外のすべての値はTrueとなります。 int に変換する場合、常に最も近い整数へ切り捨てられます。 float に変換する場合、値がそのままコピーされます。これは、他のプレイヤーと同期可能な範囲を超えた値であっても同様です。

Custom Ranges

Convert Range チェックボックスを使用すると、カスタム変換範囲を設定できる追加のUIを有効にできます。これは、値をリマップしたり、ある型から別の型へどのように変換されるかを正確に制御したりするために使用できます。

state-behaviors-cab639b-2022-06-02_18-35-32_Unity.png

Playable Layer Control

VRC Animator Layer Control component

Playable Layer Controlを使用すると、Playable Layer全体のウェイトを指定した値まで、指定した期間でブレンドできます。Animator Layer Controlと非常に似ていますが、こちらはPlayable Layer全体を制御します。

Action Playableレイヤーでは、このステートビヘイビアが頻繁に使用されます。Actionレイヤーのウェイトはデフォルトで0であり、アニメーション完了後は常に0に戻す必要があるためです。

ブレンド期間中にステートから抜けた場合、Playable Layerは直ちに目標のウェイトに設定されます。

Property Name説明
Layer影響を与えるPlayable Layer。
Goal Weightブレンド完了後に目標とするPlayable Layerのウェイト。
Blend Durationレイヤーをブレンドするまでにかかる時間。0を指定すると瞬時に切り替わります。
Debug Stringこのステートビヘイビアが実行されたとき、この文字列がログに出力されます。デバッグに便利です。

Animator Play Audio

image

「Animator Play Audio」ビヘイビアは、アニメーションステートへ遷移した際にAudioSourceを変更します。オーディオクリップやピッチ、ループ設定を変更したり、AudioSourceを再生したりすることが可能です。

AudioSourceへの相対パス(例:Armature/Hips/Spine/)を「Source Path」プロパティに入力する必要があります。このプロパティは、オーディオソースコンポーネントを選択することで自動的に入力できます。オーディオソースがアバターのルートにある場合、「Source Path」は空欄にしてください。

「Playback order」プロパティは、すべてのプレイヤーでオーディオクリップが同じ順序で再生されることを保証するものではありません。 たとえば、「Random」設定では、プレイヤーごとに異なるクリップが選択される可能性があります。すべてのプレイヤーに同じクリップを聞かせたい場合は、複数のアニメーションステートを使用するか、「Playback Order」を「Parameter」に変更し、同期されたアニメーターパラメーターと組み合わせて使用してください。

「Animator Play Audio」はサブステートマシン内のステートに追加できます。ただし、サブステートマシン自体に追加することは推奨されません。ステートビヘイビアがサブステートマシン内のすべてのステート遷移で適用されるため、他のステートビヘイビアと意図しない干渉を引き起こす可能性があります。

プロパティ名目的
ソースパスアバターのルートトランスフォームから見たAudioSourceへのパスです。
このステートに初めて遷移する際にAudioSourceが見つからない場合、AnimatorPlayAudioは無効になります。
再生順序このステートに遷移する際に、どのオーディオクリップを選択するかを決定します。
• Random: ランダムにクリップを選択します。(デフォルト)
• Unique Random: ランダムにオーディオクリップを選択しますが、同じクリップが連続して選ばれることはありません。
• Roundabout: 最初のクリップから順番に選択します。最後のクリップまで到達すると、再び最初のクリップから選択されます。
• Parameter: "int"型のアバターパラメータに基づいてクリップを選択します。例えば、パラメータが0の場合は最初のクリップが選択されます。パラメータはアバターのExpressions Parametersで定義されている必要があります。パラメータが見つからない場合は、代わりに最初のクリップが選択されます。
Clipsこのステートに遷移する際、AudioSourceに適用できるAudioClipのリストです。
Random Volumeこのステートに遷移する際、AudioSourceに適用されるランダムな音量です。0から1の範囲で制限されます。
• Min: ランダムな音量の最小値です。(デフォルト: 1)
• Max: ランダムな音量の最大値です。(デフォルト: 1)
Random Pitchこのステートに遷移する際、AudioSourceに適用されるランダムなピッチです。-3から3の範囲で制限されます。
• Min: ランダムピッチの最小値。(デフォルト: 1)
• Max: ランダムピッチの最大値。(デフォルト: 1)
Loopこのステートに遷移する際、AudioSourceのループ設定を有効にするか無効にするかを指定します。
On Enterこのステートに遷移する際に、AudioSourceを開始するか停止するかを指定します。
🗹 Stop Audio Source(デフォルト: 有効)
🗹 Play Audio Source(デフォルト: 有効)
On Exitこのステートから出る際に、AudioSourceを開始するか停止するかを指定します。
☐ Stop Audio Source(デフォルト: 無効)
☐ Play Audio Source(デフォルト: 無効)
Play On Enter Delay In Seconds「Play On Enter」が有効な場合、クリップを再生するまでの遅延時間です。0から60秒の間で制限されます。(デフォルト: 0秒)

各オーディオ設定には追加のプロパティがあります。デフォルトでは「Apply If Stopped」に設定されています。これは、Audio Sourceが前のクリップの再生を終了しておらず、「Stop Audio Source On Enter」が無効になっている場合に、設定が適用されるのを防ぎます。上記の説明を参照してください。

Property NameOn Enter
Always Applyオーディオソースが現在クリップを再生中であっても、設定が適用されます。
Apply If Stoppedこの設定は、すでにクリップを再生中でない限り、オーディオソースに適用されます(デフォルト)。
Never Applyこの設定は使用されず、インスペクター上ではグレーアウトされます。

最終更新: