前提
- unity 2018.4.2f1
- Android 6, 9
- Bluetoothマウス
- マウスは、複数ボタンあってもポインターは一つなので、単一のポインティングデバイスと見なします。
- タッチは、個々の指が独立してポイント可能なので、指毎に個別のポインティングデバイスと見なします。
やろうとしたこと
- タッチとマウスの両方で使えてマルチタッチでも支障のない排他制御を実現しようとしました。
- 最初に操作されたポインティングデバイスに制御を占有させ、後から操作されたデバイスを排除しようとしました。 (先優先)
ハマったこと
- Androidでは、マウス操作中にタッチするとマウスカーソルが消え、タッチ操作中にマウスを動かすだけでマウスカーソルが出現します。
- この切り替わりの際には、unityのポインターコールバックが正しく発火しないようです。
- 例えば、マウスでドラッグ中にタッチされた場合に、既にマウスボタンが押されていないのに
OnDrag
が呼ばれ続ける等の症状が出ました。
やったこと
- 新たにデバイスが操作された際に、既に他のデバイスが処理中であったら、先行デバイスの処理を強制終了させて、後行デバイスが新たに処理を開始するようにしました。 (後優先)