【Unity】InputSystem 対応 ピンチ操作ライブラリ (FantomPlugin 追加機能) 
2020/10/18 Sun [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 はイベント検出した瞬間のみという違いもある。
ここでは、簡単な使い方や注意点などをまとめておいた。過去記事と合わせて参考にして欲しい。
●PinchInput / PinchEventTrigger
・Valid Area 図解
※他の操作は別ページにあります。
■スワイプ(フリック) 操作
■長押し操作
■ダブル/トリプル(n回)クリック操作
(※) Unity 2019.4.12f1 / InputSystem 1.0.0 / Windows10(x64) / Android 8.0 で確認
■ピンチ操作
●PinchInput / PinchEventTrigger
主にモバイル操作用となるが、タッチされた2本の指の間隔を画面サイズで正規化された値orピクセル(Width)、ピンチ幅(距離)の直前との差分(Delta)、ピンチ開始時の幅(距離)を1とし、現在の幅の比(Ratio)を取得できる。これらはそれぞれのプロパティ(Widt, Deltah, Ratio)をポーリング的に取得するか、OnPinchStart, OnPinch のコールバックでも取得可能だ。
その他、コードなどの解説は以前の記事を参照して欲しい。

(インスペクタ)
Use InputSystem If Both Handling | ActiveInputHandling(Edit>Player Settings>Other Settings>Active Input Handling)が Both のとき、InputSystem を使う(※Both 以外のときは表示されません) オン:InputSystem / オフ: (旧)InputManager |
---|---|
Is Normalized | 画面幅(or 高さ)で正規化した値でコールバックする(オフ: ピクセル単位で返す) |
Width Reference | Is Normalized がオンのとき、画面幅(Screen.width)を基準にする [単位が px / Screen.width になる:画面幅を1とした比率=画面解像度に依存しない値] (オフ: 高さ(Screen.height)を基準にする:画面の高さを1とした比率) |
Valid Area | 認識する画面上の領域(0.0~1.0)[(0,0):画面左下, (1,1):画面右上] ※図解参照 |
▼Callbacks | |
OnPinchStart | ピンチ開始コールバック Width(ピンチ幅(距離)), center(2指間の中心座標) ※Is Normalized がオンのときは画面幅で正規化した値で、オフのときは px 単位になる |
OnPinch | ピンチ中コールバック(伸縮率とその差分) Width(ピンチ幅(距離)), Delta(直前のピンチ幅(距離)との差分), Ratio(ピンチ開始時の幅を1とし、現在の幅の比率) ※Is Normalized がオンのときは画面幅で正規化した値で、オフのときは px 単位になる |
(プロパティ)
IsPinching | ピンチ操作中フラグ(指2本のみ。3本~は無効) |
---|---|
Width | ピンチ幅(指2本間の距離) ※Is Normalized がオンのときは画面幅で正規化した値で、オフのときは px 単位になる |
Delta | 直前のピンチ幅(距離)との差分 ※Is Normalized がオンのときは画面幅で正規化した値で、オフのときは px 単位になる |
Ratio | ピンチ開始時の幅(距離)を1とし、現在の幅の比率 (指を開く→ 1.0以上(1,2,3,...倍[小数含む]/指を閉じる→ 1.0より下(1/2, 1/3, 1/4,...倍[負にはならない])) ※1以上が開く動作で、1以下が閉じる動作と判断できる |
※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/373-c1d75687
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |