マウスの遠隔操作:FFXIVタイプ
「Verethragna(ウルスラグナ) 0.10.2」で実装された新機能について2。
さて、前回の続きで。
マウスの加速にある程度の対応ができたのもつかの間。そのままの通常のモードですと、ApexやFFXIVとかではこれまたある程度で動作するのですが本来の動作とは異なるとゆーかまともに動かせないのです。
例として2つのゲームを挙げていますが他にもわんさかまともに動かないと思います。特にカメラ操作系。
なぜまともに動かないのか?
それは、良くゲームなどにおいてマウスカーソルの位置を固定してウィンドウからはみ出させない(=マウスカーソルの位置を動かさせない)という処理をしているためです。
FFXIVを例にしてみますと、マウスカーソルでNPCなどをターゲットするには普通に動作すると思います。ただ、マウスクリックしてのカメラ操作や左右同時押しで移動しながらカメラ操作などするとカメラがグルグルと回りっぱなしになると思います。通常ですとマウスを移動させた分だけカメラも動くはずなんですが、マウスカーソルの位置を固定できないため、いつまでたっても移動完了の通知がこないため無限ループと推測しています。中身は分からないのであくまで推測ですが。
ですのでこれに対応するには一般的なリモートデスクトップでは対応できないと思います。
https://answers.microsoft.com/ja-jp/windows/forum/all/%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%87/8a82833c-a811-4e3c-9dc9-979b84453411
上記にも同様の質問がありますのでRDPでも対応できてないと思います。最近見つけたので私もコメントしましたけど。で、上記にも書きましたけどこれを対応するにはサーバー側ではなくクライアント側で対応させる必要があります。
それが「0.10.2」で新たに生まれ変わった「マウス同期機能(Mouse Sync)」です。別名「ゲームモード」とも呼んでいます。SHIFT+CTRL+ALT+FF12でオンオフを切り替えれます。ゲームなどが強制的にマウスカーソルの位置を移動させているとクライアント側のマウスカーソルの位置も移動させています。これをすることでサーバー側とクライアント側のマウスカーソルの位置を一致させています。
従来までのマウス同期機能ではFFXIVのようなタイプですと対応できてませんでした。マウスボタンを押したまま移動の時にだけ強制的にマウスカーソルを戻すタイプです。
なぜ対応できてなかったかと言いますと、マウスカーソルを移動させた後に、FFXIVでは即座に戻しているのではなくやんわりと戻しています。恐らく5~10msecくらいでしょうか。なので、Verethragna側で移動させてもアプリでは移動しなかった(or すぐ戻った)といった判定ができていませんでした。
例えば、カメラを動かしてマウスボタンを離した直後にマウスカーソルの移動(or 離しながら移動)させるとマウスカーソルの位置がブレます。このブレたタイミングがFFXIVでマウス位置を戻している瞬間になります。位置が戻るまで待つとマウスボタンを離した直後にマウスカーソルを移動させることができません。ですので別の手法で対応することにしました。
それが、マウスボタンを離したらマウス同期をオフです。そうすることでマウスボタンを離した直後に移動させてもクライアント側の同期はされません。意外とこのタイプは多いのではないかと思い実装してみました。まだ試行錯誤中なのは言うまでもありませんので不具合報告をお待ちしております。もちろん単純にマウスボタンが離れただけの条件ではなくサーバー側とクライアント側のマウスカーソルの位置情報なども条件に含まれています。
ですのでなかなか複雑な条件式なんですこの辺。
でまーFFXIVはそれとなく動くような感じになりました、もちろんオリジナルにはほど遠い反応速度なんですが。
では「Apex Legends(Apex)」とは言いますとこれがまたFFXIVとは違うタイプでして・・・次回に続きます。
つづく。