Joy-ConをmacOSのUnityで使おうと思った時、Joystickの派生として登録できて動くように見えたが、かなり沼ったのでメモ。
何が起きたのか?
XBoxコントローラーをUnity2022のInput Systemで既にハンドリングしていて、そこにJoy-Conを加えようと思った。
汎用JoyStickとして認識されるので、それでいこうと思ったのだが、JoyConのコントローラーからのコールバックは一切呼ばれず、コントローラーを繋いだ瞬間になぜかトラックパッドの入力がJoyCon入力として荒ぶる感じでハンドラ呼びまくる謎現象に遭遇。
macOS側で入れてる何かの拡張にぶつかったのか、Unity2022(VRC向けのバージョン)の既知バグか??
とか色々疑って、UnityやInputSystemのバージョンを変えたりもしたが治らず。
結果的には、macOSのバージョンをVenturaからSonomaに上げることで解決した。
原因
macOSはだいぶ前のバージョンから、BlueTooth向けのゲームパッドのサポートをしているが、対応するデバイス設定には色々問題があったようで、macOS側のバージョンが上がるたびにバグ修正だったり、サポートするデバイスが増えている。
そうです、バグがある対応のパッドだったり未対応のパッドをBluetoohで繋いだ場合、一応繋がるし、Bluetooth上のデバイス名は正常なんですが、内部的には「Unkown」というデバイスとして扱われてしまうのです。
これの何が困るかというと、Unity側のInputSystemが、デバイス入力のバイト配列をパースする時、期待する値と異なるため異常動作を起こす(っぽい)。
そのため、デバイスとしては見えているが、InputSystemはご乱心する結果になる。
このようなことを引き起こすデバイスは、InputSystemのInputDebugパネル(WIndow => Analytics の下にある)で、Unknown ほにゃららみたいな表示になっているのでそれを見るとわかる。
今回は、初代SwitchのJoyConで遭遇したが、この感じだとSwich2のJoyCon対応をしたくなったら、macOSの最新版(たほー)を要求される雰囲気で、とても萎えている。。