FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Unity »【Unity】InputSystem 対応 長押し操作ライブラリ (FantomPlugin 追加機能)

【Unity】InputSystem 対応 長押し操作ライブラリ (FantomPlugin 追加機能)  


 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 はイベント検出した瞬間のみという違いもある。

 ここでは、簡単な使い方や注意点などをまとめておいた。過去記事と合わせて参考にして欲しい。


(※) Unity 2019.4.12f1 / InputSystem 1.0.0 / Windows10(x64) / Android 8.0 で確認



■長押し(クリック/タッチ)操作

●LongClickInput / LongClickEventTrigger

 主にPCではマウスクリック、モバイルではタッチとなるが、一定時間押しっぱなしにされている状態(開始と継続)を検出する。これらはプロパティ(IsLongClick)をポーリング的に取得するか、OnLongClick, OnStart, OnProgress, OnCancel のコールバックでタイミングを検知できる。

 LongClickInput は画面全体、または一部(画面の上半分、下半分など)での操作を取得するのに向いている。空の GemeObject にアタッチして使う。

 LongClickEventTrigger は UI 上での操作を取得するのに向いている。Button や Image など、Raycast Target をオンにして、同じ GameObject にアタッチする。Canvas に Graphic Raycaster がないとイベントが取得できないので注意しよう。インスペクタの設定は一部の有無だけで(Valid Area, Use InputSystem If Both Handling 等)、基本的には同じだ。

 その他、コードなどの解説は以前の記事を参照して欲しい。


(インスペクタ)
Use InputSystem If Both HandlingActiveInputHandling(Edit>Player Settings>Other Settings>Active Input Handling)が Both のとき、InputSystem を使う(※Both 以外のときは表示されません)
オン:InputSystem / オフ: (旧)InputManager
Valid Time長押しとして認識する時間 [秒]
(これより長い時間で長押しとして認識する。短いときは無視する:OnCancel が発火する)
Valid Area認識する画面上の領域(0.0~1.0)[(0,0):画面左下, (1,1):画面右上]
※図解参照
▼Callbacks
OnLongClick長押しイベントコールバック
Valid Time を超えて押した瞬間
OnStart長押し・進捗開始のイベントコールバック
クリック(タッチ)した瞬間。ただし、複数のときは無効
OnProgress進捗のイベントコールバック
押下継続中。値は Valid Time を1とし、0~1f(x100 で%を表す)
OnCancel進捗中断のイベントコールバック
指を離したり、範囲外に出たときなど、長押しとして認識できなかったとき


プロパティ)
IsLongClick長押し検出 (フレーム毎判定)
長押しとして認識された瞬間のみ true。それ以外のときは常に false


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: 0Y: 0.25
W: 1H: 0.6





■長押し(キーボード)操作

●LongKeyInput

 主にPCではキーボード、モバイルではバックキー(Android)となるが、一定時間押しっぱなしにされている状態(開始と継続)を検出する。これらはプロパティ(IsLongPress)をポーリング的に取得するか、OnLongPress, OnStart, OnProgress, OnCancel のコールバックでタイミングを検知できる。

 基本的には、クリック/タッチ操作をキー操作に代えたものと考えて良い。


(インスペクタ)
Use InputSystem If Both HandlingActiveInputHandling(Edit>Player Settings>Other Settings>Active Input Handling)が Both のとき、InputSystem を使う(※Both 以外のときは表示されません)
オン:InputSystem / オフ: (旧)InputManager
Target Key長押しを検出するキー。InputSystem では Key, (旧)InputManager では KeyCode で指定する。
KeyKeyCode互換性が無い場合があるので注意(特に記号、機能キー)。
また、設定値(enum)は別々のフィールドで定義されているため、Use InputSystem If Both Handling やシステム自体を切り替えたとき、初期化されることがあります(ヒエラルキーの EventSystem もシステムに合わせて更新した方が良い)。
Valid Time長押しとして認識する時間 [秒]
(これより長い時間で長押しとして認識する。短いときは無視する:OnCancel が発火する)
▼Callbacks
OnLongPress長押しイベントコールバック
Valid Time を超えて、長押しとして認識した瞬間
OnStart長押し・進捗開始のイベントコールバック
クリック(タッチ)した瞬間。ただし、複数のときは無効
OnProgress進捗のイベントコールバック
押下継続中。値は Valid Time を1とし、0~1f(x100 で%を表す)
OnCancel進捗中断のイベントコールバック
指を離したり、範囲外に出たときなど、長押しとして認識できなかったとき


(プロパティ)
IsLongPress長押し検出 (フレーム毎判定)
長押しとして認識された瞬間のみ true。それ以外のときは常に false






(関連記事)
【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 用に置き換えると、スクロールビュー等の移動が速過ぎる


関連記事
スポンサーサイト



category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityプラグイン  Unityライブラリ  InputSystem  FantomPlugin 
tb: 0   cm: --


トラックバック

トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/375-6776f891
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop