【Unity】InputSystemでソースコードによるマウスイベントを検知する方法 (InputManagerの代替え)

この記事の情報は次のバージョンで動作確認しています。

  • MacOS Monterey (12.1) @
  • Unity (2021.3.2f1)
  • Unity

    はじめに

    InputSystemはエディタ上で作る入力検知システムのイメージが強めですが、

    従来のInputMangerと同じようにプログラムで入力検知することもできます。

    プログラムは少し癖があるので、その辺含めて解説しようと思います。

    前提

    インストールがまだの方は以下の記事よりインストールしてからお進みください。

    www.m2game.net

    マウスのクリック判定

    取得する場所はInputManagerと同じでUpdateメソッド内で行います。

    using System;
    using UnityEngine;
    using UnityEngine.InputSystem; // ここ重要
    
    public class Sample : MonoBehaviour
    {
        void Start()
        {
    
        }
    
        private void Update()
        {
            var mouse = Mouse.current;
    
            if (mouse != null)
            {
                // 左クリックが押された時
                if (mouse.leftButton.wasPressedThisFrame)
                {
                    
                }
            }
        }
    
    }
    

    ボタンの種類や押下種別は他には下記のようなものがあります。

    ボタンの種類

    ボタン 説明
    leftButton 左ボタン
    rightButton 右ボタン
    rightButton 右ボタン
    middleButton 中央ボタン

    イベントの種類

    イベント 説明
    isPressed 押され続けている
    wasPressedThisFrame 押された瞬間
    wasReleasedThisFrame 離された瞬間

    マウス座標の取得

    現在位置

    現在のマウス座標はpositionを使います。

     Vector2 position = mouse.position.ReadValue();
    

    前フレームからの移動差分

    前フレームからの差分を取りたい場合はdeltaを使います。

    Vector2 delta = mouse.delta.ReadValue();
    

    注意点

    nullチェックを入れたほうがいいみたい

    currentがnullになったケースがあったのでnullチェックはしとくべきかと。

    以下は左クリックした瞬間を検知するプログラム例となります。

            var mouse = Mouse.current;
    
            if (mouse != null)
            {
                 // ここに押下判定していく
            }