🎮

【Unity】hidapiでラグが発生する話

2024/08/13に公開

経緯

  • InputSysmtemでもInputManagerでも入力が受け取れないコントローラーをunityで使いたい。
  • InputSystemのカスタムコントローラー、うまく使えない
  • hidapi使ったらなんとかできた~
  • なんかたまにラグが出るんだけどぉ?

って話です。
こんなことしてる人いる気しないんですが結構苦戦したので残しておこうと思います。

原因と対策

大体この記事に書いてあります。
https://www.kechuang.org/t/86515

原因

ざっくりいうと「入力のバッファーがあるんだけど、それが古い方からとられることがあるよ」とのこと。

対策

記事では以下のように、HidD_SetNumInputBuffersを使ってバッファーを制限することで対処していました。
HidD_SetNumInputBuffers(device, size);

関数持ってくるのに苦戦したので、今回は関数を持ってくるんじゃなくてデバイスの初期化時の設定バッファーを最小にすることで対策しました。

バッファーがある理由がイマイチ釈然としてないので怖い部分もありますが、とりあえずこれ(+鬼のビルドと読み込みの試行回数)で解決

余談

InputSystemってすごくね?

managerとかブラウザとかもなんですけど、デバイスからの情報だけで超いい感じに入力に分割/変換してるの、怖いとしか言いようがない。
いやまぁどこかにテンプレというか集合知というかがあるんだろうけどな~。マジスゴイ。
そのうえであの管理しやすいInputSystemの形式である。GUIでできるの最強すぎんか?

ただカスタムデバイスの登録、数日取り組んだのに全然できんかったな。。。ちょっと昔すぎて何がわからんかったか覚えてないけど。

相も変わらずこのブログが最強であることと
https://nekojara.city/unity-input-system-custom-device
公式ドキュメントが読みづらかったことだけ覚えている
https://docs.unity3d.com/Packages/com.unity.inputsystem@1.7/api/UnityEngine.InputSystem.InputDevice.html

hidapi

なんだかんだhidapi読んでたんだけど、シンプルなのもあってとても読みやすかった。オープンソース&コメント文化万歳。
あそこまで単純だと、自分でもかけてしまうのではないだろうか。まぁ現実的な話をしだすとhidapi万歳ではあるのだが、自分で書いてたらもっと早く終わった説。ちょっとある。今後なんかあったらc++の勉強がてら書いてみるのもありかもしれない。

Discussion