個々のマウス デバイスを選択的に制御できる Windows 用の複数マウス入力ツールを開発したいと考えています。また、クリック イベントが無効になっているデバイスの MouseMove イベントを追跡し、ポインターを表示したいと考えています。
私が知っている最も近い既存のソリューション (Win7 用) はTeamPlayerですが、コントロールを個々のマウスに制限する (またはカーソル画像をカスタマイズする) 機能がなく、代わりに左クリックでコントロールを自由に転送します。DeviceID でデバイスを手動で無効にしようとしましたが、再度有効にすると、TeamPlayer はそれらを認識しません。さらに、私のマウス デバイスの多くは同じ DeviceID を持っています。
私は Microsoft の MultiPoint SDK を検討しており、MultiPoint TUIO (MultiPoint SDK 用のマルチタッチ TUIO フレームワーク シミュレーター) と Mindstorm の Unity3D-TUIO を使用して、Unity3D でインタラクティブなマルチマウス ゲームを既に開発しています。
MultiPoint TUIO は MultiPoint オーバーレイ ウィンドウを使用し、TUIO メッセージを基になるターゲット ウィンドウに送信します。ただし、非 MultiPoint ウィンドウでポインターを制御するこの種のアプローチ (つまり、 MultipointMouseEventsのルーティング) には問題があります。たとえば、クリック イベントは MultiPoint ウィンドウからフォーカスを奪い、すべての入力デバイスに制御を戻します。
誰でもより良いアプローチを提案できますか?
アップデート
Unity での MultiPoint の使用に関しては、MultiPoint TUIO を適応させるのはやり過ぎであることがわかりましたが、同じアプローチを使用しました。
UDP サーバーと MultiPoint に登録された透明なウィンドウを実装するアプリケーションを (WPF で) 作成しました。このウィンドウは、Unity ウィンドウを正確にオーバーレイするように位置とサイズを調整します。[注: Unity Player 設定で「バックグラウンドで実行」を有効にする必要があります。]
次に、MultiPoint マウスの位置とイベントを、静的メンバーの状態を追跡UdpClient
する というクラスの Unity のレシーバーにストリーミングしました。MultiPointInput
次に、たとえば、特定のマウス位置にMultiPointInput.mousePosition(mouseID)
( と同様にInput.mousePosition
) でアクセスします。
私は教室で 15 ~ 20 個のワイヤレス マウスを使用して成功しました。SDK は非常に安定していますが、数台以上のワイヤレス マウスを使用すると、ハードウェアに潜む問題があります (さまざまな範囲と干渉)。