【Unity】マウス入力の検出方法まとめ。mousePositionとGetMouseButtonのサンプルスクリプト。

2021年7月29日

どうも、だらはです。
今回はマウス入力の検出方法についてまとめたいと思います。
具体的には以下を紹介します。

  • Input.mousePositionプロパティ
  • Input.GetMouseButton()メソッド
  • Input.GetMouseButtonDown()メソッド
  • Input.GetMouseButtonUp()メソッド

補足ですが、全ての入力はUnityEngine.Inputクラスを通じて取得できます。

スポンサーリンク

マウスカーソルの座標を取得

マウスカーソルの座標はInputクラスmousePositionプロパティから得られます。

public static Vector3 mousePosition{get;}

mousePositionプロパティは、ゲーム画面の左上隅を原点とするマウスカーソルの座標をピクセル単位で取得します。
型はVector3構造体ですが、Z軸は常に0です。
例として、画面にマウスカーソルの位置を表示するスクリプトを書いてみました。

◆MouseSc.sc

using UnityEngine;

public class MouseSc : MonoBehaviour
{
    private void OnGUI()
    {
        Rect rect1 = new Rect(10, 50, 300, 100);
        GUI.Label(rect1, "" + Input.mousePosition);
    }
}

出力結果は、本稿の最後に貼りたいと思います。

マウスのクリックを検出(連続)

マウスボタンが押されているかどうかはInputクラスGetMouseButton()メソッドから取得できます。

[Wrapperlesslcall]
public static bool GetMouseButton(int button);

引数のbuttonには対象のボタンを表す数値を指定します。
0は左クリック、1は右クリック、2は中央ボタンのクリックです。
ボタンが押されている間はずっとtrue、押されていなければfalseを返します。

◆例) 左クリック押下を検出するスクリプト

using UnityEngine;

public class MouseSc : MonoBehaviour
{
    bool MouseInL = false;

    void Update()
    {
        MouseInL = Input.GetMouseButton(0);
    }

    private void OnGUI()
    {
        Rect rect2 = new Rect(10, 100, 300, 150);
        if (MouseInL)
        {
            GUI.Label(rect2, "左クリックが押されているよ");
        }
    }
}

マウスのクリックを検出(ON/OFFフラグ)

マウスのクリックが押された/離れたをトリガーとして取得するにはInputクラスGetMouseButtonDown()メソッドGetMouseButtonUp()メソッドを用います。
連続入力を避ける場合に使用します。

[WrapperlessIcall]
public static bool GetMouseButtonDown(int button);

[WrapperlessIcall]
public static bool GetMouseButtonUp(int button);

◆例) 右クリックが押された/離された瞬間を検出するスクリプト

using UnityEngine;

public class MouseSc : MonoBehaviour
{
    bool MouseInRdw = false;
    bool MouseInRup = false;

    int Rdw = 0;
    int Rup = 0;

    void Update()
    {
        MouseInRdw = Input.GetMouseButtonDown(1);
        if (MouseInRdw) { Rdw++; }
        MouseInRup = Input.GetMouseButtonUp(1);
        if (MouseInRup) { Rup++; }
    }

    private void OnGUI()
    {
        Rect rect3 = new Rect(10, 150, 300, 200);
        GUI.Label(rect3, "右クリックが" + Rdw + "押されたよ");
  
        Rect rect4 = new Rect(10, 200, 300, 250);
        GUI.Label(rect4, "右クリックが" + Rup + "離された");
    }
}

◆上記全てのスクリプトをまとめたスクリプト

using UnityEngine;

public class MouseSc : MonoBehaviour
{
    bool MouseInL = false;
    bool MouseInRdw = false;
    bool MouseInRup = false;

    int Rdw = 0;
    int Rup = 0;

    void Update()
    {
        MouseInL = Input.GetMouseButton(0);
        MouseInRdw = Input.GetMouseButtonDown(1);
        if (MouseInRdw) { Rdw++; }
        MouseInRup = Input.GetMouseButtonUp(1);
        if (MouseInRup) { Rup++; }
    }

    private void OnGUI()
    {
        Rect rect1 = new Rect(10, 50, 300, 100);
        GUI.Label(rect1, "" + Input.mousePosition);

        Rect rect2 = new Rect(10, 100, 300, 150);
        if (MouseInL)
        {
            GUI.Label(rect2, "左クリックが押されているよ");
        }

        Rect rect3 = new Rect(10, 150, 300, 200);
        GUI.Label(rect3, "右クリックが" + Rdw + "押されたよ");
  
        Rect rect4 = new Rect(10, 200, 300, 250);
        GUI.Label(rect4, "右クリックが" + Rup + "離された");
    }
}

◆出力結果

良い感じですね!
ちゃんと出力できました!

最後に

いかがでしたでしょうか。

今回はマウス入力の検出方法についてまとめてきました。

  • Input.mousePositionプロパティ
  • Input.GetMouseButton()メソッド
  • Input.GetMouseButtonDown()メソッド
  • Input.GetMouseButtonUp()メソッド

別の項にて、キーボードなどの他の入力方法についてもまとめたいと思います!

スポンサーリンク

基礎

Posted by daraha_gm