C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

UE4/C++: UEDirectInputPadPlugin を Fork してにゃんにゃん

katze_7514 さんの UEDirectInputPadPlugin を Fork して でにゃんにゃんしました。

UE4 には 4.15 以降は標準で Windows RawInput Plugin が入りましたが、

  • 軸の入力値が unorm でそのまま Input のマッピングへ入力されてしまうので XInput と同じマッパーにできず XInput とは別に RawInput 用のマッピングを用意する必要がある。(あるいは Product ID, Vendor ID からデバイスごとに値域のマッパーを定義するか…)
  • ボタンのイベントが安定しない。(連打しても数秒に1度しか Pressed が来ないとか…)

など、既に UEDirectInputPadPlugin でちょろっとマッピングして便利に XInput / DirectInput の両対応をしているプロジェクト、あるいはその経験があるといまひとつ現時点の Windows RawInput Plugin に変更する気が起こらないのです。

Fork してにゃんにゃんした最初の理由はこちら:

無限ループになっちゃうパターンでアプリが永遠に起動しない現象がたまに観測されちゃった事がきっかけ、ついでにソース中の Input() が成功するケースでも最小で 200 ms × 10 回 = 2秒ちょいを起動時にここで待たされてしまう実装だったので15年くらい昔に DirectInput の実装書いて爆発していた頃の記憶も思い出しながらちょいちょいコレデイイハズ・サイテキカ(公式に基づく仕様があるわけじゃないのだけど…)しといた、と。

コレデイイハズ・サイテキカだったり、 BT 接続の DirectInput の不安定性だったり、 Fork 元にばよえ~んするのもどうかなーと思ったので Fork してひとりにゃんにゃんしたのでした。このあとも何かいじるかは、また何か不便が起きるまでないかも?あるかも?😃