MRが楽しい

MRやVRについて学習したことを書き残す

Unityでマウスのスクロール量を取得する

本日は Unity の小ネタ枠です。
Unityでマウスのスクロール量を取得する方法についてです。

Unityでマウスのスクロール量を取得する

Unityでマウスのスクロール量を取得するには Input.mouseScrollDelta を参照します。
docs.unity3d.com

Input.mouseScrollDelta は読み取り専用です。そのフレームでのスクロール量が Vector2 の形式で取得できます。
変化量は Vector2.y に格納されており、Vector2.x は利用しません。
スクロールが回転していないときは 0、回転の方向に応じて正か負の値が返ります。

トラックパッド操作ではパッド上で2本の指を合わせて上下に動かすことでスクロールをシミュレートできます。

スクロール(中央)ボタンの押下を検出する

因みにスクロール(中央)ボタンのクリック状態は Input.GetMouseButton の引数に 2 を渡すことで取得可能です。
docs.unity3d.com

サンプルシーン

スクロールの変化量を加算して表示するサンプルシーンを作成しました。
毎フレーム参照したスクロール量を加算してテキストに表示します。スクロールボタン押下時にスクロール量をリセットします。
・MouseScrollTest.cs

using System.Globalization;
using TMPro;
using UnityEngine;

public class MouseScrollTest : MonoBehaviour
{
    /// <summary>
    /// スクロール量を表示するTextコンポーネントの参照
    /// </summary>
    [SerializeField] private TMP_Text _TMPText;
    
    /// <summary>
    /// スクロール量
    /// </summary>
    private float _scrollAmount;
    
    void Update()
    {
        // スクロール量を加算する
        _scrollAmount += Input.mouseScrollDelta.y;
        SetScrollAmountText(_scrollAmount);
        
        // マウスのスクロール(中央)ボタンクリックが押下されたらスクロール量をリセットする
        if (Input.GetMouseButton(2)) _scrollAmount = 0f;
        
        // スクロール量の表示を更新する
        SetScrollAmountText(_scrollAmount);
    }

    private void SetScrollAmountText(float scrollAmount)
    {
        _TMPText.text = scrollAmount.ToString(CultureInfo.InvariantCulture);
    }
}