fc2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム »FantomPlugin
このページの記事一覧

【Unity】【エディタ拡張】ヒエラルキー(シーン)の Image, RawImage に使われている画像(Texture)を検出するエディタ拡張(ツール)  


 1つのアプリの開発を長く続けていると「あれ?この画像もう使ってなかったような…?」なんてこと良くある。バージョンアップによって不要になった画像や、アイコン(UI)を変更したり、プロジェクト内には残ってるけど、実際のシーン(ヒエラルキー)上には使ってなかったり。だけど、いきなり削除してしまうと、万が一使ってるものがあったら、画像が抜けてしまう…。

 そんなときに利用するツール。プロジェクトビューからツールに画像を指定して、検索ボタン(Search)を押せば、今開いているシーンの全ての Image, RawImage にセットされている画像と比較して、検出してくれる。




 検索結果をクリックすれば、オブジェクトを選択してくれるし、検出後に [Select] ボタンを押せば、全てを選択してくれるので、画像を一気に入れ替えるなども簡単だ。

 ここではツールのマニュアル的なものを書いておこう。


(※) Unity 2019.4.14f1 / Windows10(x64) で確認



■AttachedImageFinder のインポートと起動

 パッケージのインポートダイアログでは、ツール本体(スクリプト)とテスト用のシーンが入っている。「_Test」以下はテスト用のサンプルシーンなので、ツールだけで良いなら、スクリプトだけでも良い。



 ツール(スクリプト)をインポートしたら、「Tools」メニュー以下に「Attached Image Finder」が追加されるので、そこから起動しよう。





■AttachedImageFinder の使い方

 「Tools」メニューから起動したら、「検索画像(Texture)」に画像をセットしよう。プロジェクトビューからドロップしても良いし、ボックスの一番右にある◎を押して、画像を選択しても良い。



 デフォルトでは(None のとき)ヒエラルキーの全てのオブジェクトから検索するが、範囲を絞り込みたいときは、検索開始となる Transform をヒエラルキーからドロップしてセットしよう。セットした場合はその位置以下の階層からしか検出しなくなる。

 「検索オプション」の Image, RawImage はチェックを付けたものにセットされている画像から検出する。

●全てから検出

●ヒエラルキーの指定 Transform 以下から検出


 検索後は結果をクリックするか、「Select」ボタンを押せば、結果全てを選択できる。



 ちなみに、ヒエラルキーの階層を一気に展開するには、親を選択した後で、[Alt] + [→] (開く), [Alt] + [←] (閉じる) のショートカットを使うと便利だ。
 あとは画像を入れ替えたり、削除したりと自分の好きにすれば良い。
 使い方は難しくないだろう。


 AttachedImageFinder はスクリプトだけでできているので、自由にコピペして新しいツールでも作ってみるのも良いだろう。そのほとんどの機能が前回までの Transform 系の便利メソッドで作られている。誰かの役に立つのであれば、公開した甲斐があるというものである(笑)。







(関連記事)
【Unity】【C#】シーン(ヒエラルキー)のルートにある Transform を全て取得する(非アクティブも含む)
【Unity】【C#】非アクティブも含めて、全ての GameObject からコンポーネントを取得する
【Unity】【C#】Transfrom (GameObject) のパス名を取得する
【Unity】【C#】非アクティブも含めて、Transform (GameObject) をパス名で取得する
【Unity】【C#】ヒエラルキー(シーン)の全てのオブジェクト(Transform)をスキャンして処理をする
【Unity】【C#】EventSystem を InputSystem 用に置き換えると、スクロールビュー等の移動が速過ぎる


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



category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityライブラリ  Unityプラグイン  エディタ拡張  Transform  FantomPlugin 
tb: 0   cm: --

【Unity】InputSystem 対応 ダブル/トリプル(n回)クリック操作ライブラリ (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 で確認



■ダブル/トリプル(n回)クリック操作

●MultiClickInput / MultiClickEventTrigger

 主にPCではマウスクリック、モバイルではタッチとなるが、一定時間内で指定回数クリックを検出する。指定回数が 1 以上なら、その回数が押されたタイミングで検出されるが、指定回数が無い(0)のときは、一定時間内のクリック数を押されるたびに検出する。それらは、OnMultiClick のコールバックでクリック回数を検知できる。

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

 MultiClickEventTrigger は 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
Click Count検出するクリック回数
(1 以上のとき、指定回数で検出 / 0 のとき、有効時間内の全てのクリックを検出)
Valid Time最初の1回から有効な時間 [秒]
(この時間以内でクリックをカウントする。超えたときは、最初から(1から))
Valid Area認識する画面上の領域(0.0~1.0)[(0,0):画面左下, (1,1):画面右上]
※図解参照
▼Callbacks
OnMultiClickn回クリックイベント発生コールバック
int は検出したクリック回数を表す。
Click Count > 0 のとき、指定数に達した瞬間 / 0 のとき、有効時間内でクリックのたび (1, 2, 3,… )


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







(関連記事)
【Unity】InputSystem 対応 ピンチ操作ライブラリ (FantomPlugin 追加機能)
【Unity】InputSystem 対応 スワイプ(フリック) 操作ライブラリ (FantomPlugin 追加機能)
【Unity】InputSystem 対応 長押し操作ライブラリ (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: --

【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: --

【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 で確認



■スワイプ(フリック)操作

●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 HandlingActiveInputHandling(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: 0Y: 0.25
W: 1H: 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 用に置き換えると、スクロールビュー等の移動が速過ぎる


関連記事

category: Unity

thread: ゲーム開発

janre: コンピュータ

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

【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 で確認



■ピンチ操作

●PinchInput / PinchEventTrigger

 主にモバイル操作用となるが、タッチされた2本の指の間隔を画面サイズで正規化された値orピクセル(Width)、ピンチ幅(距離)の直前との差分(Delta)、ピンチ開始時の幅(距離)を1とし、現在の幅の比(Ratio)を取得できる。これらはそれぞれのプロパティ(Widt, Deltah, Ratio)をポーリング的に取得するか、OnPinchStart, OnPinch のコールバックでも取得可能だ。

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


(インスペクタ)
Use InputSystem If Both HandlingActiveInputHandling(Edit>Player Settings>Other Settings>Active Input Handling)が Both のとき、InputSystem を使う(※Both 以外のときは表示されません)
オン:InputSystem / オフ: (旧)InputManager
Is Normalized画面幅(or 高さ)で正規化した値でコールバックする(オフ: ピクセル単位で返す)
Width ReferenceIs 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: 0Y: 0.25
W: 1H: 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 用に置き換えると、スクロールビュー等の移動が速過ぎる


関連記事

category: Unity

thread: ゲーム開発

janre: コンピュータ

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


プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop