【Unity】InputSystem 対応 スワイプ(フリック) 操作ライブラリ (FantomPlugin 追加機能) 
2020/10/19 Mon [edit]
InputSystem も Verified (正式版) となり、色々と調査して概要もわかってきたので、今まで作った操作系のライブラリも更新してみた。
ただ、調査記事にも書いてあるが、現在の InputSystem は微妙に不安定な箇所もあり、Unity 公式にいくつかバグレポとして出しておいたが、「確認できず」という返信も貰っている。ただ私の環境では確実に起こる不具合もあるので、もしかしたら、InputSystem はハードウェア依存もあるのかも知れない(私は「Windows 日本語106キーボード」だが、Unityの中の人は「Mac 英語104キーボード」を使っているとしたら、不具合が見つけづらいという可能性もある[※掲載時点:InputSystem 1.0.0])。
なので、一気に InputSystem に移行するのはやめた方が良いだろう。幸いにも現在は(掲載時点:Unity2019.4.12f1)(旧)InputManager との混在も可能なので、動作確認が取れたものだけ使う方が良いだろう(できる限り色々な機器で試した方が良いと思われる ← 一部の人だけ使えないという問題が起こる可能性がある)。
そのため、完全互換とまではいかないかも知れないが、新旧システムどちらも使えるように入力関連の機能を中心に更新してみた。InputSystem のバージョンが上がったら、修正するかも知れないが、とりあえず 旧 InputManager の仕様に似せた実装なので、使い勝手はほとんど変わらないだろう。
ちなみに、スクリプトは大きく分けて、「~Input」と「~EventTrigger」となっているが、~Input は画面の全体や一部での検出、~EventTrigger はアタッチした UI 上での検出と考えて良い。また、~Input はイベント検出した瞬間以外に、ポーリング的な使い方もできるが、~EventTrigger はイベント検出した瞬間のみという違いもある。
ここでは、簡単な使い方や注意点などをまとめておいた。過去記事と合わせて参考にして欲しい。
●SwipeInput / SwipeEventTrigger
・Valid Area 図解
※他の操作は別ページにあります。
■ピンチ操作
■長押し操作
■ダブル/トリプル(n回)クリック操作
(※) Unity 2019.4.12f1 / InputSystem 1.0.0 / Windows10(x64) / Android 8.0 で確認
■スワイプ(フリック)操作
●SwipeInput / SwipeEventTrigger
主にモバイル操作用となるが、タッチされた1本の指の4方向と移動量[px]を返す。これらはそれぞれのプロパティ(Direction, DirectionRaw)をポーリング的に取得するか、OnSwipe, OnSwipeRawのコールバックで取得できる。
SwipeInput は画面全体、または一部(画面の上半分、下半分など)での操作を取得するのに向いている。空の GemeObject にアタッチして使う。
SwipeEventTrigger は UI 上での操作を取得するのに向いている。Button や Image など、Raycast Target をオンにして、同じ GameObject にアタッチする。Canvas に Graphic Raycaster がないとイベントが取得できないので注意しよう。インスペクタの設定は Valid Area の有無だけで、基本的には同じだ。
その他、コードなどの解説は以前の記事を参照して欲しい。

(インスペクタ)
Use InputSystem If Both Handling | ActiveInputHandling(Edit>Player Settings>Other Settings>Active Input Handling)が Both のとき、InputSystem を使う(※Both 以外のときは表示されません) オン:InputSystem / オフ: (旧)InputManager |
---|---|
Width Reference | 画面幅(Screen.width)を Valid Width の比率の基準にする [画面幅を1とした比率] (オフ: 高さ(Screen.height)を基準にする:画面の高さを1とした比率) |
Valid Width | スワイプとして認識する移動量の画面比 [画面幅に対する比率] (0.0~1.0:1.0で端から端まで。この値より長い移動量でスワイプとして認識する) |
Timeout | スワイプとして認識する時間 [秒] (これより短い時間でスワイプとして認識する。長いときは無視する) |
Valid Area | 認識する画面上の領域(0.0~1.0)[(0,0):画面左下, (1,1):画面右上] ※図解参照 |
▼Callbacks | |
OnSwipe | スワイプ方向コールバック Vector.left / .right / .up / .down のいずれか |
OnSwipeRaw | スワイプ方向の補正なし値コールバック タッチ開始から終了の方向ベクトル [px] |
(プロパティ)
Direction | スワイプ方向コールバック Vector.left / .right / .up / .down のいずれか |
---|---|
DirectionRaw | スワイプ方向の補正なし値コールバック タッチ開始から終了の方向ベクトル [px] |
※Debug Tools は主に Valid Area を可視化します。
※Game ビューの解像度に依存します。上手く反映されない場合は、Game ビューをいじってみて下さい。
(Valid Area 図解)
Valid Area は、画面左下を (0, 0) とし、画面の最大幅と高さを (1, 1) としたときの全体比で指定する。つまり、0.5 だと画面の長さの半分で、0.25 だと 1/4 である。つまり、解像度が変わっても位置は変わらないことになる(ただし、縦置き・横置きで回転する場合は注意)。基本的に他の ~Input 系の Valid Area も同じようになっている。画面全体での位置となるので(画面の上半分で操作、下半分は使わないなどに向いている)、UI 上に限定したいなら、~EventTrigger 系を使った方が良いだろう。
(例)
X: 0 | Y: 0.25 |
W: 1 | H: 0.6 |

(関連記事)
【Unity】InputSystem 対応 ピンチ操作ライブラリ (FantomPlugin 追加機能)
【Unity】InputSystem 対応 長押し操作ライブラリ (FantomPlugin 追加機能)
【Unity】InputSystem 対応 ダブル/トリプル(n回)クリック操作ライブラリ (FantomPlugin 追加機能)
【Unity】【C#】ピンチ操作を取得してコールバックする
【Unity】【C#】スワイプ(フリック)を判定、方向を取得してコールバックする
【Unity】【C#】長押し(ロングタップ)を取得してコールバックする
【Unity】【C#】SmoothFollow3(SmoothFollow に回転・遠近・高さ操作とピンチ・スワイプとの連携機能を付けた拡張版)
【Unity】【C#】(旧)KeyCode と InputSystem.Key の対応
【Unity】【C#】InputSystem の Keyboard クラスと (旧)Input.GetKey の対応
【Unity】【C#】InputSystem の Mouse クラスと(旧)Input.GetMouseButton の対応
【Unity】【C#】InputSystem.Key をリアルタイムで調べる / Windows 日本語キーボードでの Key 一覧
【Unity】【C#】InputSystem でマウスのホイール(scroll)取得と (旧)Input との対応
【Unity】【C#】InputSystem.TouchPhase の IsActive(), IsEndedOrCanceled() [拡張メソッド] の具体値
【Unity】【C#】InputSystem の displayName や control path から Key (キーコード) を取得(変換)する
【Unity】【C#】InputSystem で Android のバックキーの isPressed がなぜか一定時間で false になる?
【Unity】【C#】EventSystem を InputSystem 用に置き換えると、スクロールビュー等の移動が速過ぎる
- 関連記事
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/374-2cab323f
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |