UE版KATWALKのキャリブレーション

KATDemoCharacterController Blueprint 詳細解説

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° してアバターを回転させれば、首を振っても進行方向はブレない。

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 にある。

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)がこの回転に依存して、結果まっすぐ歩ける。

5. Print Spd(デバッグ)

速度 (m/s) を Print String するだけ。動作確認用。

まとめ — 流れを 3 行で覚える

Calibrate → YawCorrection = BodyYaw – HMDYaw Tick: CorrectedYaw = HMDYaw + YawCorrection SetActorRotation(CorrectedYaw) + AddMovementInput(moveSpeed)

これさえ守れば、首を振っても直進する KAT Walk 体験が実装できます。