C2CORE Unity SDK 仕様(コードリーディング版)

C2CORE Unity SDK (コードリーディング版)

はじめに

SDKの目的と概要
注記

本書はソース(KATNativeSDK.cs, KATXRWalker.cs, WalkC2ExtraData.cs, C2ExtraDataDemo.cs)のみから抽出できる仕様をまとめています。DLL内部実装や未提供ファイルに依存する詳細は記載していません。

1. 目的

本SDKはKAT Walk系トレッドミルをUnityアプリケーションに統合し、ユーザー移動量の取得・プレイヤーアバター制御・触覚/LEDフィードバックを実現することを目的とします。

2. 想定利用環境

項目 内容
OS Windows 10/11(UNITY_STANDALONE_WIN)
Unity 2020 LTS以降推奨
ネイティブライブラリ KATSDKWarpper.dll / libKATSDKWarpper.so(自動ロード)
対応デバイス KAT Walk Treadmill / Walk Coord 2 (C2) /

3. 用語・略語

用語 定義
TreadMillData 1フレーム分のトレッドミル状態(姿勢・速度・センサー値)
DeviceData 個々のセンサ(H・L・R)のバッテリー・ボタン情報
ExtraInfoC2 Walk C2専用の接地/スケーティング判定などの拡張データ
Yaw Correction HMD向きとトレッドミル推定Body向きの差分補正角

4. モジュール構成

SDKの主要コンポーネント構成

5. クラス/API仕様

主要クラスの機能と使用方法

5.1 KATNativeSDK(static)

メンバー 概要
int DeviceCount() 接続デバイス総数を取得
DeviceDescription GetDevicesDesc(uint idx) デバイス識別情報を取得
double GetLastCalibratedTimeEscaped() 前回キャリブレーションからの経過秒
TreadMillData GetWalkStatus(string sn="") 指定SN(空文字で1台目)の現在状態を取得
void ForceConnect(string sn) デバイス再接続を強制
void UnloadSDKLibrary() DLLアンロード
void SetOnDeviceLostHandler(Action) 切断コールバック登録

5.1.1 構造体

Struct 主なフィールド
DeviceDescription device(名称) / serialNumber / pid / vid / deviceType 等
DeviceData btnPressed / isBatteryCharging / batteryLevel / firmwareVersion
TreadMillData deviceName / connected / lastUpdateTimePoint / bodyRotationRaw (Quaternion) / moveSpeed (Vector3[3]) / deviceDatas (DeviceData[3]) / extraData(byte[128])

5.1.2 KATExtension(Walk Coord 2以降)

メソッド 振動/LED制御
VibrateConst(float amp) 連続振動 (0–1)
VibrateInSeconds(float amp,float sec) sec秒間連続振動
VibrateOnce(float amp) クリック感
VibrateFor(float sec,float amp) 周期振動
LEDConst / LEDInSeconds / LEDOnce / LEDFor 同等パターンでLED光量制御

5.2 KATXRWalker(MonoBehaviour)

役割:TreadMillDataを読み取り、プレイヤー(rigidbody / character controller / transform)を移動。

公開Inspectorパラメータ

名称 説明
xr GameObject シーンroot (XR)
eye GameObject HMDカメラ
executeMethod enum {RigidBody / CharacterController / MovePosition} 移動方式
speedMul float 0.5–10 速度倍率(未使用)
speedMode enum {linear / constant} 速度決定モード
constantSpeed float constant時の固定速度
constantSpeedThreshold float 上回らなければ静止

5.3 WalkC2ExtraData

メソッド 説明
extraInfo GetExtraInfoC2(TreadMillData) extraDataをアンマーシャルし拡張構造体へ変換

extraInfoフィールド:

isLeft/RightGround, isLeft/RightStatic, motionType, skatingSpeed, lFootSpeed, rFootSpeed

5.4 C2ExtraDataDemo(サンプル)

UI Textにデバイス状態+extraInfoを0.5sごとに平均速度付きで表示する開発確認用スクリプト。

6. データ更新タイミング・パフォーマンス

データ更新頻度と処理タイミング
処理 周期
Unity FixedUpdate 60 FPS (targetFrameRate=60)
ネイティブSDK更新 GetWalkStatus()呼び出し毎(1 Frame)

7. コールバック / 例外

エラーハンドリングと例外処理

デバイス切断: SetOnDeviceLostHandlerで文字列SN・メッセージ・理由コードを受け取る。

例外処理は外部DLL依存。ラッパーでtry/catchはなし。

8. 制限事項・留意点

実装上の注意点と制約
  • extraDataは128 bytes固定。Walk C2以外の端末でレイアウトが異なる。
  • キャリブレーションボタンはセンサユニット側に依存。
  • KATXRWalkerはHMD水平面のみ補正(Pitch/Rollは未補正)。
  • Vibrate*,LED*はWalk Coord 2以降限定。

9. 拡張ポイント・今後の課題

将来的な改善点と拡張可能性
  • 他デバイスextraDataのストラクチャ定義追加。
  • 速度倍率(speedMul)のコード実装(現在未使用)。
  • エラーコード体系の明文化(DLL側実装確認要)。
  • ScriptableObject化による設定共有。

10. 版数管理

ドキュメントのバージョン履歴
日付 変更概要
0.1 2025-05-01 コードリーディング初版

付録 A. MotionType列挙 (Walk C2)

モーション検知の状態コード
0
静止 (MOTION_STATIC)
1
片足スケーティング開始 (MOTION_SKATING)
2
持続スケーティング (MOTION_KEEP_SKATING)
3
微動 (MOTION_MICROACTION)
4
歩行 (MOTION_MOVE)

まとめ

  • KATNativeSDKがネイティブDLLと通信し、KATXRWalkerがUnity物理層を制御。
  • Walk C2固有データはWalkC2ExtraDataで取り出し可能。
  • 触覚/LEDフィードバックAPIはKATExtensionに統合されている。