UE版KATWALKのキャリブレーション
KATDemoCharacterController Blueprint
ノード単位の詳細解説
(Unreal Engine 5/公式 UE SDK サンプル)
1. Event Graph (一覧フロー)
Event Tick
└─ Get Last Valid Walk Status
(DLL から最新フレームの腰センサー値を取得)
↓
SET Current Frame Treadmill State
(変数へ保存)
↓
Calibration()
(YawCorrection を計算)
↓
Apply Movement()
(速度を AddMovementInput)
↓
Apply Rotation()
(YawCorrection を加算して SetActorRotation)
要点:Tick ➜ ①センサー値更新 → ②キャリブ → ③移動 → ④回転 の順に直列実行。
この順序で呼ぶことで、補正値が計算されたあとに移動/回転が適用される。
この順序で呼ぶことで、補正値が計算されたあとに移動/回転が適用される。
2. Calibration 関数
"静止状態で呼ぶ" を想定。Yaw 差分を計算して Yaw Correction に保存
ノード | 具体的処理 | 目的 / 補足 |
---|---|---|
Get Current Frame Treadmill State → Break Rotator | bodyRotationRaw の Yaw を抽出 | 現物の腰センサーが向いている角度(°) |
Get HMD Rotation → Break Rotator | HMDYaw を抽出 | ユーザーの視線方向 |
float – float | BodyYaw – HMDYaw | YawCorrection を算出 |
Set Yaw Correction (Float Var) | 変数に保存 | 毎フレーム参照できるよう保持 |
Set Actor Location (Option) | HMD の位置にキャラクターを Warp | キャリブ時に原点誤差をリセット |
Print String (Debug) | YawCorrection を画面表示 | 値を確認したい場合のみ |
意味:
「腰が 70°、頭が 30° → 差 40°」と覚える。
以後 頭の Yaw に必ず +40° してアバターを回転させれば、首を振っても進行方向はブレない。
「腰が 70°、頭が 30° → 差 40°」と覚える。
以後 頭の Yaw に必ず +40° してアバターを回転させれば、首を振っても進行方向はブレない。
3. Apply Movement 関数
moveSpeed を AddMovementInput へ渡すだけ。方向ベクトルは腰基準のまま
ノード | 処理 | メモ |
---|---|---|
Get Current Frame Treadmill State → moveSpeed (Vector3) | DLL が返す速度 (m/s) | 既にワールド空間ベクトル |
Vector Length > 0? | 速度がゼロか判定 | 零ベクトルの時は入力しない |
Add Movement Input | World Direction = moveSpeed.GetSafeNormal() Scale = moveSpeed.Size() |
UE CharacterMovement に移動指示 |
意味:
"進む速さ" そのものは SDK に任せる。
方向を正しく扱う鍵は、このあと行う Apply Rotation にある。
"進む速さ" そのものは SDK に任せる。
方向を正しく扱う鍵は、このあと行う Apply Rotation にある。
4. Apply Rotation 関数
HMD の Yaw に Yaw Correction を加えてアバター全体を回転
ノード | 処理 | 目的 |
---|---|---|
Get Current Frame Treadmill State → Body Rotation Raw | 胴体 Quaternion(安全のため存在確認のみ) | - |
Get HMD Rotation → Break Rotator → Yaw | HMDYaw を取得 | - |
Yaw Correction (変数) + HMDYaw | CorrectedYaw を計算 | 首振り補正 |
Make Rotator (Pitch=0, Yaw=CorrectedYaw, Roll=0) | Rotator 作成 | - |
Set Actor Rotation | キャラクター本体の回転を更新 | アバターが「体の正面」を向く |
(Optional) Set Actor Rotation (Camera) | カメラを同期回転 | VRカメラを一緒に回すか任意 |
意味:
視線を左右に振っても、加算した補正値がある限り アバターは"体の前"を維持。
実際の移動ベクトル(Apply Movement)がこの回転に依存して、結果まっすぐ歩ける。
視線を左右に振っても、加算した補正値がある限り アバターは"体の前"を維持。
実際の移動ベクトル(Apply Movement)がこの回転に依存して、結果まっすぐ歩ける。
5. Print Spd(デバッグ)
速度 (m/s) を Print String するだけ。動作確認用。
まとめ — 流れを 3 行で覚える
Calibrate → YawCorrection = BodyYaw – HMDYaw
Tick: CorrectedYaw = HMDYaw + YawCorrection
SetActorRotation(CorrectedYaw) + AddMovementInput(moveSpeed)
これさえ守れば、首を振っても直進する KAT Walk 体験が実装できます。