「トラッキング → コントローラー」で入力を有効にし、プロファイルを管理します。アバターごとの移動は、選択したアバターの「トラッキング」で設定します。
コントローラー
トラッキングパネル下部のコントローラーセクションでは、ゲームパッドやコントローラーを管理します。コントローラー入力はLive2DおよびVRMのパラメータバインディング、インスタンスごとのステージ移動、オートメーションやアバターショートカット用の複数ボタン同時押しに対応しています。コントローラー入力はトラッキングソースやアバター割り当てから独立して動作し、カメラの直接操作には非対応です。
コントローラーの接続
コントローラーを有効化をオンにしてコントローラーを接続します:
- DualSense、DualSense Edge、DualShock 4(v1・v2)コントローラーはWebHID経由でプラグアンドプレイ接続されます。ウィンドウのフォーカスや事前のボタン入力なしで自動認識され、アプリ再起動後も自動で再接続されます。
- Windowsでは、Xboxプロトコル対応コントローラー(最大4台)をネイティブXInput経由で読み取ります。こちらもボタン入力なしで接続され、他のアプリのウィンドウが前面にある間も入力を報告し続けます。
- その他のコントローラーはブラウザのGamepad APIに従います。ステージをクリックしてウィンドウをフォーカスし、コントローラーの任意のボタンを押すと一覧に表示されます。
接続中のコントローラーには、現在接続されているデバイスの総数(プロファイル未割り当ての機器を含む)が表示されます。接続中のプロファイルカードが先頭に並び、残りは折りたたまれた保存済みプロファイルリストに保管されます。カードを選択してもリアルタイムモニターの表示が切り替わるだけで、既存のバインディングは変更されません。
| コントロール | 説明 |
|---|---|
| 名前 | 識別しやすいプロファイル名。Enterキーまたはフォーカスを外すと保存され、空欄にするとデフォルトの番号名に復元 |
| スティックのデッドゾーン | 選択中プロファイルのアナログスティック両方に適用(デフォルト15%)。ドリフト状態に応じてコントローラーごとに微調整可能 |
| コントローラーを割り当て | 保存済みプロファイルを選択してこの項目をクリックし、実機コントローラーのボタンを押すことで物理機器を対象プロファイルへ紐付け |
| プロファイルを削除 | 保存済みプロファイル内で利用可能。先に対象のコントローラーを切断してください。バインディングやショートカットは保持されますが、その番号は新規機器へ再割り当てされなくなります |
アプリ設定にはプロファイル番号、機器が報告する製品名、ハードウェア固有識別子の暗号学的ハッシュ値が保存されます(識別子そのものは保存されません)。ハードウェア固有識別子を持つ機器(DualSenseやDualSense Edgeなど)は、同一製品であっても接続順序やUSBケーブルを変えたあとにそれぞれのバインディングを保ちます。コントローラーを取り外しても入力信号が解放されるのみで、プロファイルやバインディングは削除されません。
DualShock 4、XInput、および標準のブラウザGamepad API(仕様上の制約による)はハードウェア固有のシリアル番号を提供しません。こうした固有識別子を持たないコントローラーが再接続された場合(ワイヤレスのスリープ復帰やアプリ再起動時など)、同じ製品名を持つ未接続の識別子なしプロファイルが1つだけ空いており、待機中の該当コントローラーも1台だけであるときは、自動的にその保存済みプロファイルへ復帰します。同一のコントローラーを複数台併用している場合や手動で割り当てを変更した後は、再接続後にコントローラーを割り当てから再度割り当ててください。
Xbox、その他のPlayStation、Nintendo Switch ProコントローラーはChromiumのstandard標準マッピングに従い、表面の印字ではなく物理ボタン配置に基づいて認識されます。認識できない非標準のブラウザレイアウトは非対応として表示されます。ジャイロセンサー、タッチパッドのタッチやスワイプ、カスタムボタンリマップ、複数コントローラーの1台への統合などは現バージョンでは対応していません。
パラメータを動かす
モデルのパラメータエディタでは、保存済みまたはバインド済みのコントローラープロファイルごとに1組の入力グループが生成されます。各バインディングルールはどの入力グループでも選べるため、コントローラーごとに別々のアバターやパラメータを動かせます。
プロファイル1はVTS標準の入力名を使うため、既存の.vtube.jsonマッピングをそのまま読み込めます。プロファイル2以降はControllerの後にプロファイル番号を挿入します(Controller2StickLeftX、Controller3Cross、Controller12TriggerRightなど)。この番号付きの名前はPersonaの独自拡張で、プラグインAPIの入力ターゲットも同じ名前を使います。下表はプロファイル1のIDです:
| 入力 | ID | 値 |
|---|---|---|
| 左スティックX · 左スティックY | ControllerStickLeftX、ControllerStickLeftY | −1〜1、Y軸は上方向が正 |
| 右スティックX · 右スティックY | ControllerStickRightX、ControllerStickRightY | −1〜1、Y軸は上方向が正 |
| 左スティック押し込み · 右スティック押し込み | ControllerStickPressLeft、ControllerStickPressRight | 0〜1 |
| 方向キーX · 方向キーY | ControllerDPadX、ControllerDPadY | −1〜1、Y軸は上方向が正 |
| 方向キー (上) · 方向キー (下) · 方向キー (左) · 方向キー (右) | ControllerDPadUp、ControllerDPadDown、ControllerDPadLeft、ControllerDPadRight | 0〜1 |
| フェイスボタン (下) · フェイスボタン (右) · フェイスボタン (左) · フェイスボタン (上)(A/B/X/Y) | ControllerCross、ControllerCircle、ControllerSquare、ControllerTriangle | 0〜1 |
| 左ショルダーボタン · 右ショルダーボタン(L1/R1) | ControllerShoulderLeft、ControllerShoulderRight | 0〜1 |
| 左トリガー · 右トリガー(L2/R2) | ControllerTriggerLeft、ControllerTriggerRight | 0〜1 |
| オプション (左) · オプション (右) | ControllerOptionLeft、ControllerOptionRight | 0〜1 |
| ホームボタン | ControllerHome | 0〜1 |
| タッチパッドクリック | ControllerTouchPadPress | 0〜1 |
| 左親指の位置 · 右親指の位置 | ControllerThumbPosLeft、ControllerThumbPosRight | 0ボタン、1スティック、2オプション、3タッチパッドクリック |
| 左人差し指の位置 · 右人差し指の位置 | ControllerFingerPosLeft、ControllerFingerPosRight | 0ショルダー、1トリガー、2同時押し |
| 左側ボタンのいずれか · 右側ボタンのいずれか | ControllerButtonsAnyLeft、ControllerButtonsAnyRight | 0〜1 |
| 左側ボタンの押下数 · 右側ボタンの押下数 | ControllerButtonCountLeft、ControllerButtonCountRight | 0〜4 |
| コントローラーの傾き | ControllerLean | −1〜1 |
- 4つの方向キー入力を使えば、方向ごとに個別のパラメータを持つモデルでも、軸の入力範囲を
0〜−1に反転させずにそのまま割り当てられます。 - PlayStationのタッチパッドクリックはDualShock 4、DualSense、SCUF Vantageに対応しています。
- 親指の
0は十字キー(左)またはフェイスボタン(右)、1はその側のスティックを倒しているか押し込んでいる状態です。3を出力するのは右親指のみで、右側で他に入力がない状態でタッチパッドをクリックした時です。 - 親指と人差し指の位置は、アイドル中は最後の値を保持し、コントローラー接続時は
0から始まります。 - 親指・人差し指の位置から新しくバインディングを作ると、出力1単位あたり1ステップの入力範囲(
0..1のパラメータなら0..1)が既定で設定され、スティックやトリガーでそのまま1に到達します。 - 左側ボタンのいずれか、右側ボタンのいずれか、左側ボタンの押下数、右側ボタンの押下数は、左右それぞれの親指が担当するボタンを集計します。左側は十字キー(各軸最大1回)、スティック押し込み、オプション、右側はフェイスボタン、スティック押し込み、オプションが対象です。ショルダーとトリガーは除外されます。
- コントローラーの傾きはVTS互換の滑らかな傾きオフセットです。左側の押下で
+0.6、右側の押下で−0.6となり、両側を同時に押すと相殺され、さらに左右スティックXの平均×0.4が差し引かれます。
コントローラー入力は、フェイストラッキングのスイッチやソース割り当てとは無関係に、読み込み済みの各モデル自身のバインディングへ直接作用します。各コントローラー入力はモデルの入力ごとのキャリブレーションを通過したあと顔入力と加重合算され、範囲補正・応答曲線・平滑化へ送られます。顔トラッキングが途切れている間も、保持された顔入力は残り、コントローラー入力は応答し続けます。
パラメータエディタで入力スライダーをドラッグすると、その値が物理コントローラー入力より優先されます。コントローラーバインディングはフレームレート非依存の指数フィルターを使い、平滑化0で即時追従、100で時定数350ミリ秒となります。
1台のコントローラーを取り外すと該当グループの入力のみが解放され、コントローラーを有効化スイッチをオフにすると全制御チャンネルが解放されます。切断後、他のソースから駆動されていないLive2Dパラメータの出力値はCubismの初期デフォルト値へ滑らかに復帰します。
VRMのターゲット
VRMアバターのパラメータエディタでは、Cubismパラメータとは異なる、3Dアバター専用の仮想バインディングターゲット群が生成されます:
| ターゲット | 範囲 | 説明 |
|---|---|---|
HeadYaw、HeadPitch、HeadRoll | −30°〜30° | 正規化された頭部ボーンに加算される角度オフセット |
BodyYaw、BodyPitch、BodyRoll | −15°〜15° | 利用可能な背骨および胸部ボーンへ動的配分される回転オフセット |
GazeYaw、GazePitch | −90°〜90° | 現在の視線角度に加算されるオフセット |
Expression:<名前> | 0〜1 | モデル標準またはカスタム表情モーフへのウェイト |
角度値はフェイストラッキングの座標系規則に従い、VRM 0.xと1.0におけるピッチ・ロール軸の違いはレンダラー内部で吸収されます。表情名はモデル内部で定義された名前と、大文字・小文字を区別して照合されます。
ボーンおよび視線オフセットはベースアニメーション、ポーズトラッキング、フェイストラッキングの上に加算レイヤーとして重なり、表情バインディングは対象ウェイトのみを排他的に制御します。各フレームの描画処理末尾でドライバが基底状態を復元するため、オフセットが無制限に累積することはなく、手動調整済みの表情ウェイトが上書きされることもありません。コントローラー入力を離すかルールを削除すると、ターゲット値は下層レイヤーの現在状態へ滑らかに戻り、他のコントローラーやトラッキングソースが操作する部位には干渉しません。
バインディング規則はモデル自身に帰属し、モデル同ディレクトリのtracking sidecarファイル内に保存されるため、同一モデルの複数インスタンスで共有されます。同一モデルの別コピーを独立して移動させたい場合は、後述のインスタンスごとのステージ移動機能を使用してください。
外部公開のパラメータ注入APIは現在Live2D専用です。上記のVRM仮想バインディングターゲットはパラメータバインディングエディタ内にのみ存在します。
ステージ移動
アバター自身のトラッキング設定セクションでコントローラーで移動を有効化し、保存済みプロファイルを指定します。コントローラーを有効化マスタースイッチもオンにしておく必要があります。ステージ移動機能はオプションであり、デフォルトでは無効です。通常のパラメータバインディングやショートカットはこの機能に依存しません。
| コントロール | Live2D | VRM |
|---|---|---|
| 左スティックX | 水平移動 | ワールド座標系X軸に沿って移動 |
| 左スティックY | 垂直移動 | ワールド座標系Z軸に沿って移動(上入力で負のZ方向) |
| 右スティックX | ステージ平面内で回転 | ワールド座標系Y軸を中心に回転 |
| 右スティックY | 拡大縮小倍率を変更 | ワールド座標系Y軸の高さを昇降 |
Live2Dの拡縮は現在のサイズに対して等比で行われ、規定のスケール上限・下限を守ります。
| コントロール | 範囲 | 既定値 | 説明 |
|---|---|---|---|
| 移動速度 | 0〜10 | 0.5 | Live2Dではステージ高さ/秒、VRMではメートル/秒。Live2Dのズーム速度とVRMの昇降速度にも連動 |
| 回転速度 | 0〜720 | 90 | 単位は度/秒 |
| 応答のスムージング | 0〜0.5 | 0.12 | 速度フィルターの時定数(秒)。0で即時応答 |
移動は経過した実時間に対してフィルター後の速度を数値積分するため、30、60、120 fpsのどれでも移動速度は変わりません。スティックを中央に戻すと、アバターは滑らかに減速して新しい位置で止まります。コントローラーの取り外し、無効化、再割り当てを行うと蓄積速度はすぐにクリアされ、再接続時に以前の慣性が残ることはありません。非表示のアバターは移動しません。
マウスドラッグによる直接配置、自動化のモデル位置アクションやプラグインによる位置補間移動、テキスト入力、ショートカット記録、コントローラーの割り当ての間は、ステージ移動が一時停止します。
ステージ移動によって更新されたインスタンスのワールド配置座標は、シーンファイルと一緒に保存されます。
移動中に歩く
適用対象VRM設定で移動中に歩くをオンにし、アニメーションインベントリから歩行アニメーションクリップを選択します。スイッチを先にオンにしておくことも可能ですが、クリップを指定するまでは動作しません。インポートされたVRMA、Mixamo FBX、MMD VMDアニメーションは、アイドルクリップと同じ登録済みアセット群を共有します。
アバターが地面を移動している間は歩行クリップがループ再生され、止まると通常のアイドルアニメーションへ滑らかにブレンドして戻ります。
歩行周期の速度は、再生速度1.0倍のときのクリップの公称移動速度(メートル/秒)です。実際の再生レートは、計測した地面移動速度をこの公称速度で割り、さらにアバターのスケールで割って算出されるため、移動速度やアバターのスケールを変えると歩調も自動で合わせられます。
- シーンの配置座標を優先するため、歩行クリップ内の腰(Hips)の水平(X/Z)移動は除去され、上下動は残ります。
- 歩行アニメーションレイヤーには頭部・視線・表情のトラックが含まれないため、コントローラーやフェイストラッキングによるポーズはそのまま保持されます。
- 単発アニメーションが優先されます。全身ポーズトラッキング(VMC、mocopi、ウェブカメラ)が腰や脚のボーンを制御している間は歩行が自動的に抑制されますが、手のみを駆動するVMCとは併用できます。
移動方向を向くオプションは、歩行クリップの有無にかかわらず、回転速度に従ってアバターを進行方向へ滑らかに向けます(右スティックによる旋回が優先)。歩行判定は水平平面上の実際の移動量(減速フェーズを含む)に基づいて行われるため、高さ方向の変化のみでは歩行は開始されません。本システムは直接移動の上に重ねられたプロシージャルアニメーション演出であり、経路探索、コリジョン判定、地形追従などは含まれません。
コントローラーのショートカット
ショートカットレコーダーは、オートメーションのキーボードまたはコントローラートリガーとアバターショートカットの両方で使われ、同じコントローラー上の最大3ボタンの同時押しを記録できます。スティックの倒しきり、十字キー、トリガー、PlayStationのタッチパッドクリックも記録できます。
- 記録したショートカットはプロファイルに紐付くため、コントローラー1とコントローラー2の同じ物理ボタンに別々のアクションを割り当てられます。記録中に他のコントローラーで押していたボタンは含まれません。
- ショートカットは押した瞬間に1回だけ発火し、長押ししてもリピートしません。
- バックグラウンドで動作は、キーボード修飾キーなしでコントローラーショートカットにも適用されます。
- 記録中やテキスト入力中はショートカットが発火せず、入力イベントも消費されるため、レコーダーを閉じたり入力フィールドから離れたりしたときに、押したままのボタンが遅れて発火することはありません。
コントローラー1のマクロはVTS標準のController*トークンを用い、コントローラー2以降はPersona拡張の番号付きトークンを用います。コントローラーショートカットはOSのグローバルホットキーには登録されず、キーボードとコントローラーの混在同時押しや複数コントローラーをまたぐ同時押しは非対応です。同一の組み合わせが重複設定された場合は、オートメーションがアバターショートカットより優先されます。
.persona.jsonファイルはすべてのコントローラーショートカットを標準のトリガー文字列形式で保存します。.vtube.jsonを使用するモデルの場合、番号付きコントローラーショートカットはホットキー項目のPersonaControllerTriggers拡張フィールド内に保存され、VTS側で未知の列挙値エラーが発生しないようVTSネイティブのトリガー枠は空にされます。Personaは読み込み時にこの拡張フィールドを優先解釈します。該当ショートカットをキーボードやコントローラー1のボタンへ再割り当てするか、ショートカットを消去すると、拡張フィールドは自動的に削除されます。
VTS自身はこれらの番号付きコントローラーショートカットを実行できず、VTS内でモデル設定ファイルを再保存するとカスタム拡張フィールドが消失する場合があります。
最終更新日:2026年10月21日