fc2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Unity »【Unity】【C#】InputSystem でマウスのホイール(scroll)取得と (旧)Input との対応

【Unity】【C#】InputSystem でマウスのホイール(scroll)取得と (旧)Input との対応  


 InputSystem も Verified (正式版) となり、(旧)InputManager との混在も可能でもあるが、いずれ InputSystem の方法を中心として使いたいので調査中。

 少し前に「Mouse クラスと (旧)Input.GetMouseButton の対応 」はおおよそ同じ値になったが、マウスホイールを試してみたら、少し値が異なるので、調べてみた。と言っても使い方はあまり変わらないので、軽く見ておくだけで理解できると思う。

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



●簡単な実験用コード
using UnityEngine;

#if ENABLE_INPUT_SYSTEM
using UnityEngine.InputSystem;
#endif

public class MouseWheelTest : MonoBehaviour
{
private void Update()
{
var mouseAxis = Input.GetAxis("Mouse ScrollWheel");
if (mouseAxis != 0)
{
Debug.Log($"[frame: {Time.frameCount}] Input.GetAxis(Mouse ScrollWheel) = {mouseAxis:F3}");
}

var mouseDelta = Input.mouseScrollDelta;
if (mouseDelta != Vector2.zero)
{
Debug.Log($"[frame: {Time.frameCount}] Input.mouseScrollDelta = {mouseDelta.ToString("F3")}");
}

#if ENABLE_INPUT_SYSTEM
var mouseScroll = Mouse.current.scroll.ReadValue();
if (mouseScroll != Vector2.zero)
{
Debug.Log($"[frame: {Time.frameCount}] Mouse.current.scroll = {mouseScroll.ToString("F3")}");
}
#endif
}
}


 デフォルトの設定では、ホイールを後ろ方向(自分側)に回せば、負の値となり、前進方向に回せば、正の値となる。各メソッドで基準量が違うが、その定数倍が戻値になると考えて良い。

 今回は、Input.GetAxis, Input.mouseScrollDelta, Mouse.current.scroll で比較してみたが、それぞれ、0.1, 1, 120 の倍数が出ている(素早く回すと、3倍、5倍…となる)。

 この Mouse.current.scroll の 120 は何なんだろう?とマニュアルを見てみたが、どうやらピクセル量を表しているようだ。といっても私の場合、デスクトップPCに繋いだ物理マウスだったので、値が固定なのだが(機器に依存するのかも?)、例えば、ノートPCのパッドでスクロールするときなどは、量が変化するのかも知れない(※未確認)。

マニュアル抜粋 (Google 翻訳)
最後のフレーム以降のピクセル単位のデルタとして表される、マウススクロールコントロールからの入力。物理的なスクロールホイール、またはタッチパッドジェスチャから取得できます。

 また、Input.mouseScrollDeltaMouse.current.scroll は Vector2 が戻値であるが、Input.mouseScrollDelta の Vector2.x は無視(常に 0)、Mouse.current.scroll の方は機器によっては横方向の動きも取れるようだ(※未確認)。ちなみに、OS でマウスのスクロール量の設定を変えても、Unity 上の値は変わらなかった。

マニュアル抜粋 (翻訳)
xコンポーネントは水平スクロールホイール、 yコンポーネントは垂直スクロールホイールに対応します。ほとんどのマウスには水平スクロールホイールがないため、yでのアクティビティのみを見ます。

 なお、Input.GetAxis の値は (旧)InputManager(Edit>Project Settings...>Input Manager)の設定に依存する。各 Axes(ここでは "Mouse ScrollWheel" となっているが、名前は自由に付けられる)の設定で「Sensitivity」の値が基準量で、この定数倍になる。つまりこの実験ではデフォ値(0.1)でやってしまったが、Sensitivity を 1 にすれば、Input.mouseScrollDelta.y と全く同じ値となる。



 互換性を考えると、Mouse.current.scroll を一定の pixel 値で割れば良いが、マウス機器の精度で値が変わるかも知れないので、ちょっとやっかいだね(この実験での場合、.y/120 で比率が計算できるが、他の機器だと値が違う可能性がある)。InputSystem をアプリに導入する場合、ピクセル単位でのホイール用 Sensitivity 設定項目でも追加しないと、その人のマウス機器によって結果が変わってしまうかもなぁ…。|||orz

(参考)
Mouse support
Mouse.scroll
Input.GetAxis
Input.mouseScrollDelta



 マニュアルを見てると、「No corresponding API yet.」(まだ対応するものがない)というのがいくつもあるので、全て新旧一致できるわけではないようだが、よく使われる機能なら完全互換でいけそうなものも多いね。

 ただ、今まで使っていた (旧)InputManager のコード(※主に Input) は全て書き換えないとならないので、大変な労力がいるのが難点。なので、しばらくは一部機能だけ使う感じになるだろう。

 いずれ、スワイプ, ピンチ, 長押しなどのライブラリも InputSystem に対応しようと思っているが、ラッパー関数でも作らないと、旧新互換で作るのは骨が折れるね(笑)。



スワイプ, ピンチ, 長押しなども同梱されている多機能 Android プラグイン







(関連記事)
【Unity】【C#】InputSystem の Mouse クラスと(旧)Input.GetMouseButton の対応
【Unity】5ボタンマウスの KeyCode 図解
【Unity】【C#】InputSystem.TouchPhase の IsActive(), IsEndedOrCanceled() [拡張メソッド] の具体値
【Unity】【C#】(旧)KeyCode と InputSystem.Key の対応
【Unity】【C#】InputSystem.Key をリアルタイムで調べる / Windows 日本語キーボードでの Key 一覧
【Unity】【C#】KeyCode をリアルタイムで調べる / Windows 日本語キーボードでの記号の KeyCode 一覧
【Unity】【C#】InputSystem の Keyboard クラスと (旧)Input.GetKey の対応
【Unity】【C#】InputSystem の displayName や control path から Key (キーコード) を取得(変換)する


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



category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityリファレンス  InputSystem 
tb: 0   cm: --


トラックバック

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

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop